python中的嵌套列表
我正在尝试拆分以下列表:python中的嵌套列表,python,nested-lists,Python,Nested Lists,我正在尝试拆分以下列表: 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_列表有第[0]行、第[2]行和第[4]行 y_列表有第[1]行、第[3]行和第
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_列表有第[0]行、第[2]行和第[4]行
y_列表有第[1]行、第[3]行和第[5]行
其中每行有2个列表
有办法吗
谢谢你的帮助或提示
我应该提到,这个问题中的“A_列表”已经修改。情况如下:
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]
大多数张贴的答案都是在编辑前对问题的回答。感谢所有有用的答案。您可以通过单独切片来实现这一点,而不需要这样的条件:
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]]
但它并没有维护秩序。如果这对您很重要,请使用发布的其他解决方案之一。您可以通过单独切片来实现这一点,而不需要这样的条件:
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]]
但它并没有维护秩序。如果这对您很重要,请使用发布的其他解决方案之一。(此答案的第一部分是在编辑问题之前编写的,更改列表的布局
)您的列表没有“行”。相反,您希望将第一个和第二个元素分配给x_列表
,第三个和第四个元素分配给y_列表
,第五个和第六个元素分配给x_列表
,依此类推
为此,您可以枚举列表中的元素,并根据它们的索引模4将它们分配给x\u list
和y\u 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]]
在您默默地修改您的问题(不要这样做;您使大多数现有答案无效!)之后,您现在可以使用我的第二种方法,除了您新的A_列表
现在已经是行
所在的位置:
>>> 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]
(此答案的第一部分是在编辑问题之前编写的,更改了A_列表的布局
)您的列表没有“行”。相反,您希望将第一个和第二个元素分配给x_列表
,第三个和第四个元素分配给y_列表
,第五个和第六个元素分配给x_列表
,依此类推
为此,您可以枚举列表中的元素,并根据它们的索引模4将它们分配给x\u list
和y\u 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]]
在您默默地修改您的问题(不要这样做;您使大多数现有答案无效!)之后,您现在可以使用我的第二种方法,除了您新的A_列表
现在已经是行
所在的位置:
>>> 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]
与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]
上述两种解决方案均适用于(修改前)。要了解目前问题的解决方案,请参见。与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]
上述两种解决方案均适用于(修改前)。要了解目前问题的解决方案,请参阅。只是一个简单的循环
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)
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_列表=[]
y_列表=[]
V=0
对于A_列表中的A:
如果V%4小于2:
x_列表。附加(A)
其他:
y_列表。附加(A)
V=V+1
打印(x_列表、y_列表)
只是一个简单的循环
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)
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_列表=[]
y_列表=[]
V=0
对于A_列表中的A:
如果V%4小于2:
x_列表。附加(A)
其他:
y_列表。附加(A)
V=V+1
打印(x_列表、y_列表)
如果假设每行中只有两列,则可以执行以下操作:
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])
注意:这仅在列数为两列时有效。如果列数不总是两个或另一个集合数,那么这是一个困难的任务,就像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]]
这将适用于任何数量的输入。如果假设每行中只有两列,则可以执行以下操作:
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])
注意:这仅在列数为两列时有效。如果列数不总是两个或另一个集合数,那么这是一个困难的任务,就像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]]
这将适用于任何数量的输入。您可以使用切片语法提取所需的项,然后:
您可以使用切片语法提取所需的项目,然后:
嵌套列表没有“行”。相反,前两个元素进入一个列表,第三个和第四个元素进入另一个列表,等等。所以所有偶数索引进入x_列表,所有奇数索引进入y_列表?是的,这就是我要尝试的do@S.M由于你修改了你的问题,被接受的答案变得无效。你能接受另一个与现在的问题相对应的答案吗?非常感谢。嵌套列表没有“行”。相反,前两个元素进入一个列表,第三个和第四个元素进入另一个列表,等等。所以所有偶数索引进入x_列表,所有奇数索引进入y_列表?是的,这就是我要尝试的do@S.M由于你修改了你的问题,被接受的答案变得无效。你能接受另一个与现在的问题相对应的答案吗?非常感谢。不,那不是OP想要的。@Błotosmętek我想我读得太快了。。谢谢你的回答。@Ev.Kounis这个问题似乎已经修改过了,所以A_列表的形状现在不同了。不过,我只是想对订单发表评论。如果您想保留顺序,那么您可以-而不是添加切片列表-zip
将它们向上,结果是:[x代表zip中的sub(A_list[::4],A_list[1::4])代表sub中的x]
@A_guest您可以做很多事情来恢复顺序,但如果您走这条路,这个解决方案可能会停止有效。另一个例子是:[x代表x,如果x在A_列表中[::4]+A_列表[1::4]]
,它使用原始列表的顺序来订购新的。不,这不是OP想要的。@Błotosmętek I gu