如何仅使用一个 for 循环将三个列表理解合并为一个?
how to combine three lists comprehension into one using only one for loop?
我有一个范围为(1 到 31)的列表。
最终名单是l = [x, y, z]
你可以看到我的代码,它使用三个 for 循环工作正常:
l = range(1, 31)
x = ([j for (i, j) in enumerate(l) if i % 10 == 0])
y = ([j for (i, j) in enumerate(l) if i % 10 == 4])
z = ([j for (i, j) in enumerate(l) if i % 10 == 9])
l1 = [x, y, z]
print (l1)
l = range(1, 31)
x, y, z = ([j for (i, j) in enumerate(l) if i % 10 == 0]), ([j for (i, j) in enumerate(l) if i % 10 == 4]), ([j for (i, j) in enumerate(l) if i % 10 == 9])
l1 = [x, y, z]
print (l1)
输出是:
[[1, 11, 21], [5, 15, 25], [10, 20, 30]]
[[1, 11, 21], [5, 15, 25], [10, 20, 30]]
我尝试只使用一个 for
循环。
l = ([(x,y,z) for (i1, x), (i2, y), (i3, z) in enumerate(l) if i1 % 10 == 0 and i2 % 10 == 4 and i3 % 10 == 9])
print l
# l = ([(x,y,z) for ((i, x), (i, y), (i, z)) in enumerate(l) if i % 10 == 0 and i % 10 == 4 and i % 10 == 9])
# print l
# l = ([(j1,j2,j3) for ((i1,i2,i3), (j1,j2,j3)) in enumerate(l) if i1 % 10 == 0 and i2 % 10 == 4 and i3 % 10 == 9])
# print l
我收到这个错误:
l = ([(x,y,z) for (i1, x), (i2, y), (i3, z) in enumerate(l) if i1 % 10 == 0 and i2 % 10 == 4 and i3 % 10 == 9])
ValueError: need more than 2 values to unpack
不知道能不能做到。
请帮助我。
你的解决方案是最好的方法,其他方法是创建一个 for
循环:
lst = []
for x in [0, 4, 9]:
lst.append([j for i, j in enumerate(l) if i % 10 == x])
输出:
>>> lst
[[1, 11, 21], [5, 15, 25], [10, 20, 30]]
>>>
尝试-
l = range(1, 31)
mylist = []
lst = [0, 4, 9]
for i in lst:
mylist.append([b for a, b in enumerate(l) if a % 10 == i])
print(mylist)
或列表理解-
mylist = [[b for a, b in enumerate(l) if a % 10 == i] for i in lst]
我有一个范围为(1 到 31)的列表。
最终名单是l = [x, y, z]
你可以看到我的代码,它使用三个 for 循环工作正常:
l = range(1, 31)
x = ([j for (i, j) in enumerate(l) if i % 10 == 0])
y = ([j for (i, j) in enumerate(l) if i % 10 == 4])
z = ([j for (i, j) in enumerate(l) if i % 10 == 9])
l1 = [x, y, z]
print (l1)
l = range(1, 31)
x, y, z = ([j for (i, j) in enumerate(l) if i % 10 == 0]), ([j for (i, j) in enumerate(l) if i % 10 == 4]), ([j for (i, j) in enumerate(l) if i % 10 == 9])
l1 = [x, y, z]
print (l1)
输出是:
[[1, 11, 21], [5, 15, 25], [10, 20, 30]]
[[1, 11, 21], [5, 15, 25], [10, 20, 30]]
我尝试只使用一个 for
循环。
l = ([(x,y,z) for (i1, x), (i2, y), (i3, z) in enumerate(l) if i1 % 10 == 0 and i2 % 10 == 4 and i3 % 10 == 9])
print l
# l = ([(x,y,z) for ((i, x), (i, y), (i, z)) in enumerate(l) if i % 10 == 0 and i % 10 == 4 and i % 10 == 9])
# print l
# l = ([(j1,j2,j3) for ((i1,i2,i3), (j1,j2,j3)) in enumerate(l) if i1 % 10 == 0 and i2 % 10 == 4 and i3 % 10 == 9])
# print l
我收到这个错误:
l = ([(x,y,z) for (i1, x), (i2, y), (i3, z) in enumerate(l) if i1 % 10 == 0 and i2 % 10 == 4 and i3 % 10 == 9])
ValueError: need more than 2 values to unpack
不知道能不能做到。
请帮助我。
你的解决方案是最好的方法,其他方法是创建一个 for
循环:
lst = []
for x in [0, 4, 9]:
lst.append([j for i, j in enumerate(l) if i % 10 == x])
输出:
>>> lst
[[1, 11, 21], [5, 15, 25], [10, 20, 30]]
>>>
尝试-
l = range(1, 31)
mylist = []
lst = [0, 4, 9]
for i in lst:
mylist.append([b for a, b in enumerate(l) if a % 10 == i])
print(mylist)
或列表理解-
mylist = [[b for a, b in enumerate(l) if a % 10 == i] for i in lst]