本文介绍了展望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的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!