python - 遍历其元素具有可变长度的列表
python - iterate through list whose elements have variable length
如何遍历 Python 中元素为可变长度列表的列表或元组?例如我想做
tup=( [1,2], [2,3,5], [4,3], [4,5,6,7] )
for a,b,c,d in tup:
print a,b,c,d
然后有 tup
的短元素,例如 None
。我找到了以下代码的解决方法,但我相信一定有更好的方法。
tup=( [1,2], [2,3,5], [4,3], [4,5,6,7] )
for a,b,c,d in [ el if len(el)==4 else [ el[i] if i<len(el) else None for i in range(4)] for el in tup ]:
print a,b,c,d
其中4
实际上是"longest"元素的长度。
有没有更好的方法?
要匹配您自己的输出,您可以使用 izip_longest
填充 None
并再次转置以恢复原始顺序:
from itertools import izip_longest
tup=( [1,2], [2,3,5], [4,3], [4,5,6,7] )
for a,b,c,d in zip(*izip_longest(*tup)):
print(a,b,c,d)
(1, 2, None, None)
(2, 3, 5, None)
(4, 3, None, None)
(4, 5, 6, 7)
如果 int
、float
等会更好,那么您可以为 izip_longest
函数指定一个不同的 fillvalue
参数:
tup=( [1,2], [2,3,5], [4,3], [4,5,6,7])
for a,b,c,d in zip(*izip_longest(*tup,fillvalue=0)):
print(a,b,c,d)
(1, 2, 0, 0)
(2, 3, 5, 0)
(4, 3, 0, 0)
(4, 5, 6, 7)
根据您的 print
声明判断您可能正在使用 python2 但对于使用 python3 的任何人作为 @TimHenigan it is zip_longest
.
如果您不需要列表,您可以使用 itertools.izip 其中 returns 一个迭代器:
from itertools import izip_longest, izip
tup = ( [1, 2], [2, 3, 5], [4, 3], [4, 5, 6, 7])
for a, b, c, d in izip(*izip_longest(*tup, fillvalue=0)):
print(a, b, c, d)
在Python3中我们可以这样做:
for i in tup:
for j in i:
print(j,"",end="")
print()
如何遍历 Python 中元素为可变长度列表的列表或元组?例如我想做
tup=( [1,2], [2,3,5], [4,3], [4,5,6,7] )
for a,b,c,d in tup:
print a,b,c,d
然后有 tup
的短元素,例如 None
。我找到了以下代码的解决方法,但我相信一定有更好的方法。
tup=( [1,2], [2,3,5], [4,3], [4,5,6,7] )
for a,b,c,d in [ el if len(el)==4 else [ el[i] if i<len(el) else None for i in range(4)] for el in tup ]:
print a,b,c,d
其中4
实际上是"longest"元素的长度。
有没有更好的方法?
要匹配您自己的输出,您可以使用 izip_longest
填充 None
并再次转置以恢复原始顺序:
from itertools import izip_longest
tup=( [1,2], [2,3,5], [4,3], [4,5,6,7] )
for a,b,c,d in zip(*izip_longest(*tup)):
print(a,b,c,d)
(1, 2, None, None)
(2, 3, 5, None)
(4, 3, None, None)
(4, 5, 6, 7)
如果 int
、float
等会更好,那么您可以为 izip_longest
函数指定一个不同的 fillvalue
参数:
tup=( [1,2], [2,3,5], [4,3], [4,5,6,7])
for a,b,c,d in zip(*izip_longest(*tup,fillvalue=0)):
print(a,b,c,d)
(1, 2, 0, 0)
(2, 3, 5, 0)
(4, 3, 0, 0)
(4, 5, 6, 7)
根据您的 print
声明判断您可能正在使用 python2 但对于使用 python3 的任何人作为 @TimHenigan zip_longest
.
如果您不需要列表,您可以使用 itertools.izip 其中 returns 一个迭代器:
from itertools import izip_longest, izip
tup = ( [1, 2], [2, 3, 5], [4, 3], [4, 5, 6, 7])
for a, b, c, d in izip(*izip_longest(*tup, fillvalue=0)):
print(a, b, c, d)
在Python3中我们可以这样做:
for i in tup:
for j in i:
print(j,"",end="")
print()