展望izip_longest时如何一次访问2个列表? -Python [英] How to access 2 list at a time while looking ahead with izip_longest? -Python

查看:97
本文介绍了展望izip_longest时如何一次访问2个列表? -Python的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

下面的代码一次只能访问一个列表,并且每个循环都向前看1个元素:

The code below only access one list at a time and looking ahead 1 element each loop:

from itertools import izip_longest

alist = ['foo','bar','duh']
blist = ['ofo','ardavak','dot','dotdat']

for i, plus1 in izip_longest(alist, alist[1:], fillvalue=None):
  iplus1 = i + plus1 if plus1 is not None else ""

for j, plus1 in izip_longest(blist, blist[1:], fillvalue=None):
  jplus1 = j + plus1 if plus1 is not None else ""

我如何预见每个循环同时包含2个列表的1个元素?像这样:

How do i look ahead 1 element each loop for 2 list simultaneously? something like:

for (i,plus1),(j,plus1) in izip(izip_longest(alist, alist[1:], fillvalue=None), izip_longest(blist, blist[1:], fillvalue=None)):
  print i,j
  print i,j+plus1
  print i+plus1,j
  print i+plus1,j+plus1

所需的输出应如下所示:

The desired output should look like this:

foo ofo
foo ofoardavak
foobar ofo
foobar ofoardvak
bar ardavak
bar ardavakdot
barduh ardavak
barduh ardavakdot
duh dot
duh dotdotdat
 dot
 dotdotdat
 dotdat

 dotdat

推荐答案

也许是这样的:

from itertools import izip_longest

alist = ['foo','bar','duh']
blist = ['ofo','ardavak','dot','dotdat']

combined_list = list(izip_longest(alist, blist, fillvalue=""))

for (i,j),(iplus1,jplus1) in izip_longest(combined_list, combined_list[1:], fillvalue=("", "")):
    print i,j
    print i,j+jplus1
    print i+iplus1,j
    print i+iplus1,j+jplus1

但是请注意,zip()仅包含min(len(alist),len(blist))个元素,即返回的列表的长度被截断为最短参数序列的长度.

But be aware that zip() only takes min(len(alist),len(blist)) elements, i.e., the returned list is truncated in length to the length of the shortest argument sequence.

这篇关于展望izip_longest时如何一次访问2个列表? -Python的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆