Python列表迭代列表

Python列表迭代列表,python,list,loops,Python,List,Loops,我希望遍历列表,但不是以典型的方式遍历列表中的每个元素,然后移动到下一个列表 如果我想按顺序1,4,2,5,3,6打印元素,这是列表元素的列表,然后是列表并重复,而不是1,2,3,4,5,6,那么逻辑是如何工作的 假设所有列表长度相同: 列表长度=lenls[0] 对于范围列表中的i\u长度: 对于ls中的列表: 打印列表[i] 假设所有列表长度相同: 列表长度=lenls[0] 对于范围列表中的i\u长度: 对于ls中的列表: 打印列表[i] 如果你想要简短的代码 ls = [[1, 2, 3

我希望遍历列表,但不是以典型的方式遍历列表中的每个元素,然后移动到下一个列表

如果我想按顺序1,4,2,5,3,6打印元素,这是列表元素的列表,然后是列表并重复,而不是1,2,3,4,5,6,那么逻辑是如何工作的


假设所有列表长度相同:

列表长度=lenls[0] 对于范围列表中的i\u长度: 对于ls中的列表: 打印列表[i]
假设所有列表长度相同:

列表长度=lenls[0] 对于范围列表中的i\u长度: 对于ls中的列表: 打印列表[i] 如果你想要简短的代码

ls = [[1, 2, 3], [4, 5, 6]]
result = [v for tt in list(zip(*tuple([tuple(x) for x in ls]))) for v in tt]
print(result)
输出

[1, 4, 2, 5, 3, 6]
正如@iz_所建议的,对于相同的输出,有一种更短的方法

ls = [[1, 2, 3], [4, 5, 6]]
result = [v for tt in zip(*ls) for v in tt]
print(result)
如果你想要简短的代码

ls = [[1, 2, 3], [4, 5, 6]]
result = [v for tt in list(zip(*tuple([tuple(x) for x in ls]))) for v in tt]
print(result)
输出

[1, 4, 2, 5, 3, 6]
正如@iz_所建议的,对于相同的输出,有一种更短的方法

ls = [[1, 2, 3], [4, 5, 6]]
result = [v for tt in zip(*ls) for v in tt]
print(result)

从技术上讲,将列表列表转换为一个转置的平面列表,即元组,但这并没有什么区别。zip转换列表,sum将其展平

indexes = sum(zip(*ls), tuple())
# (1, 4, 2, 5, 3, 6)

如果您仍然想要一个列表,但可能不想要,请调用listindexes。

从技术上讲,将列表列表转换为一个转置的平面列表,即元组,但这没有什么区别。zip转换列表,sum将其展平

indexes = sum(zip(*ls), tuple())
# (1, 4, 2, 5, 3, 6)

如果您仍然需要列表,但可能不需要,请调用listindexes。

已经为此定义了一个库函数:itertools.zip\u:

这是更通用的,因为它将自动创建项目,即使您有2个以上的子列表


除此之外,它还负责不同长度的子列表

已经为此定义了一个库函数:itertools.zip\u:

import numpy as np

ls = [[1, 2, 3], [4, 5, 6], [7,8,9], [10,11,12]]
print(ls)
res1 = [ls[r][c] for c in range(len(ls[0])) for r in range(len(ls)) ]
print(res1)

print('-' * 30)
# Now using numpy which is generally faster
np_ls = np.array(ls)
print(np_ls)
res = [j  for i in range(len(np_ls[0])) for j in np_ls[...,i]]
print(res)
这是更通用的,因为它将自动创建项目,即使您有2个以上的子列表


除此之外,它还负责不同长度的子列表

Does/questions/1663807/如何在并行帮助中迭代两个列表?Does/questions/1663807/如何在并行帮助中迭代两个列表?为什么不只是[v代表tt in zip*ls代表v in tt]?为什么不只是[v代表tt in zip*ls代表v in tt]?
import numpy as np

ls = [[1, 2, 3], [4, 5, 6], [7,8,9], [10,11,12]]
print(ls)
res1 = [ls[r][c] for c in range(len(ls[0])) for r in range(len(ls)) ]
print(res1)

print('-' * 30)
# Now using numpy which is generally faster
np_ls = np.array(ls)
print(np_ls)
res = [j  for i in range(len(np_ls[0])) for j in np_ls[...,i]]
print(res)