我正在尝试拆分以下列表:
A_list = [[[1,2,3,4],[5,6]], ==>[0]
[[3,4,5],[2,3,5]], ==>[1]
[[5,8,9],[10,11]], ==>[2]
[[22,20],[5,7,8]]] ==>[3]
为:
x_list = [[1,2,3,4],[5,6],
[5,8,9],[10,11]]
y_list = [[3,4,5],[2,3,5] ,
[22,20],[5,7,8]]
x_list有row [0],row [2]和row [4] ....
y_list包含row [1],row [3]和row [5] ...
其中每行有2个列表
有没有办法做到这一点?
感谢您的帮助或提示
我应该提到' A_list'在这个问题上已被修改。如下:
A_list = [[1,2,3,4],[5,6], ==>[0]
[3,4,5],[2,3,5], ==>[1]
[5,8,9],[10,11], ==>[2]
[22,20],[5,7,8]] ==>[3]
大多数发布的答案都是在编辑之前的问题。感谢所有有用的答案。
答案 0 :(得分:3)
(此答案的第一部分是在编辑问题之前编写的,更改了A_list
的布局。)您的列表没有“行”。相反,您希望将第1和第2个元素分配给x_list
,将第3个和第4个元素分配给y_list
,将第5个和第6个分配给x_list
,依此类推。
为此,您可以enumerate
列表中的元素,并根据其索引模4将其分配给x_list
和y_list
。
>>> x_list = [a for i, a in enumerate(A_list) if i % 4 < 2]
>>> x_list
[[1, 2, 3, 4], [5, 6], [5, 8, 9], [10, 11]]
>>> y_list = [a for i, a in enumerate(A_list) if i % 4 >= 2]
>>> y_list
[[3, 4, 5], [2, 3, 5], [22, 20], [5, 7, 8]]
或者,您可以先将这些行创建,然后将列表分为两个条目组,然后使用切片表示法[::2]
和[1::2]
提取元素并展平那些名单再次出现:
>>> rows = [A_list[i:i+2] for i in range(0, len(A_list), 2)]
>>> x_list = [x for g in rows[::2] for x in g]
>>> y_list = [y for g in rows[1::2] for y in g]
在你默默地修改你的问题后(不要这样做;你使大多数现有答案无效!)你现在可以使用我的第二种方法,除了你的新A_list
现在已经是rows
有:
>>> x_list = [x for g in A_list[::2] for x in g]
>>> y_list = [y for g in A_list[1::2] for y in g]
答案 1 :(得分:2)
您可以使用切片语法提取所需的项目,然后使用flatten the resulting sub-lists:
id1
答案 2 :(得分:1)
与Python TOOWTDI原理相反,有几种方法可以做到这一点。一种可能性是:
x_list = [A_list[i] for i in range(len(A_list)) if i % 4 < 2]
y_list = [A_list[i] for i in range(len(A_list)) if i % 4 >= 2]
另:
rows = [ A_list[i:i+4] for i in range(0, len(A_list), 4)]
x_list = [x for row in rows for x in row[0:2]]
y_list = [x for row in rows for x in row[2:4]]
以上解决方案均适用于original problem(在修改之前)。有关问题的解决方案,请参阅here。
答案 3 :(得分:1)
只是一个简单的循环。
A_list = [[1,2,3,4],[5,6],[3,4,5],[2,3,5],[5,8,9],[10,11],[22,20],[5,7,8]]
x_list = []
y_list = []
V = 0
for A in A_list:
if V % 4 < 2:
x_list.append(A)
else:
y_list.append(A)
V = V + 1
print(x_list, y_list)
答案 4 :(得分:0)
如果您假设每行只有两列,那么您可以执行以下操作:
A_list = [[1,2,3,4],[5,6],
[3,4,5],[2,3,5],
[5,8,9],[10,11],
[22,20],[5,7,8]]
x_list = []
y_list = []
for x in range(len(A_list))[::4]:
x_list.append(A_list[x])
x_list.append(A_list[x + 1])
y_list.append(A_list[x + 2])
y_list.append(A_list[x + 3])
注意:仅当列数为2时才有效。如果列数不总是两个或另一个设置数,则这是一个很难完成的任务,如Python列表
x_list = [[1,2,3,4],[5,6],
[5,8,9],[10,11]]
与
相同 x_list = [[1,2,3,4],[5,6],[5,8,9],[10,11]]
这适用于任何数量的输入。
答案 5 :(得分:-1)
你可以单独使用切片来实现这一点,而不是这样的条件:
A_list = [[1,2,3,4],[5,6],
[3,4,5],[2,3,5],
[5,8,9],[10,11],
[22,20],[5,7,8]]
x_list = A_list[::4] + A_list[1::4]
y_list = A_list[2::4] + A_list[3::4]
print(x_list) # [[1, 2, 3, 4], [5, 8, 9], [5, 6], [10, 11]]
print(y_list) # [[3, 4, 5], [22, 20], [2, 3, 5], [5, 7, 8]]
但不保留订单。如果这对您来说很重要,请使用其中一个解决方案。