在Python中,有没有一种好的方法来遍历不同长度的列表?
例如,
a = [1,2,3]
b=[4,5]
c = [a,b]
for val1, val2, val3 in c:
print val1
print val2
print val3
假定该列表将至少包含2个值,并且在某些列表中,第3个值是可选的。上面的for
循环不适用于b,显然,val3对列表'b'不可用。在这种情况下,我想将val3打印为0。如果不可用,可以提供默认值吗?
for val1, val2, val3=0 in c:
以上语法也不起作用。请帮忙。
答案 0 :(得分:1)
如果您想花哨的话(“优雅”?),可以在给定的列表中填充零:
def pad_list(t, size, default):
return t + [default] * (size - len(t))
for x in c:
v1, v2, v3 = pad_list(x, 3, 0)
print(v1)
print(v2)
print(v3)
类似地,如果您正在使用元组,这是另一个功能:
def pad_list(t, size, default):
return t + (default,) * (size - len(t))
答案 1 :(得分:1)
在这种情况下,您可以将zip_longest
与fillvalue
一起使用处理空槽:
from itertools import zip_longest
a = [1,2,3]
b = [4,5]
l = []
for x, y in zip_longest(a, b, fillvalue=0):
l.append((x, y))
print(list(zip(*l)))
# [(1, 2, 3), (4, 5, 0)]
如果您需要不在列表中的值,只需将最后一个print
替换为:
for val1, val2, val3 in zip(*l):
print(val1)
print(val2)
print(val3)
# 1
# 2
# 3
# 4
# 5
# 0
答案 2 :(得分:0)
这很简单
c = [1,2,3]
val1 , val2 , *val3= [1,2 , 3]
val1 = 1,val2 = 3,val3 = [3]
c=[1,2]
val1 , val2 , *val3= [1,2 , 3]
val1 = 1,val2 = 3,val3 = []
答案 3 :(得分:0)
def foreach(l):
def deco(f):
for xs in l:
f(*xs)
return deco
@foreach([[1, 2, 3], [4, 5]])
def _(a, b, c=6):
print(a, b, c, sep='\n')
答案 4 :(得分:0)
连接列表的最简单方法是通过chain
模块中的itertools
函数。
import itertools
a = [1, 2, 3, 4, 5, 6]
b = [7, 8, 9, 10, 11, 12]
c = ['A', 'B', 'C', 'D', 'E', 'F', 'U']
combined = itertools.chain( a, b, c ) # combines in order
# enumerate lists to allow for iteration
for index, value in enumerate(combined):
print(value, end = ' ')
1 2 3 4 5 6 7 8 9 10 11 12 A B C D E F U