在python中操作列表中的列表

时间:2011-10-23 23:23:37

标签: python nested-lists

我在处理python中列表中的列表时遇到了麻烦(我在编程方面很新)。

现在,我如何访问每个嵌套列表位置,然后操纵嵌套列表值的位置,例如,在保持嵌套列表在主列表中的位置的同时更改其顺序。

例如: 如果我想离开:

aList = [
    [1,2,3,4,3,2],
    [2,3,4,5,4,3],
    [2,1,2,3,4,3]
]

到这里:

new_aList = [
     [2,3,4,3,2,1],
     [3,4,5,4,3,2],
     [3,4,3,2,1,2]
]

我知道如何访问每个列表,但是我遇到了一个关于如何更改嵌套列表值的位置的块。

感谢您的帮助!

4 个答案:

答案 0 :(得分:8)

使用列表推导来获取新元素,并可选择使用slice-assign来替换列表中的现有元素。

new_aList = [list(reversed(x)) for x in aList]
aList[:] = [list(reversed(x)) for x in aList]

答案 1 :(得分:3)

你可以像这样反转每个项目

>>> aList = [
...     [1,2,3,4,3,2],
...     [2,3,4,5,4,3],
...     [2,1,2,3,4,3]
... ]
>>> aList[0].reverse()
>>> aList[1].reverse()
>>> aList[2].reverse()
>>> aList
[[2, 3, 4, 3, 2, 1], [3, 4, 5, 4, 3, 2], [3, 4, 3, 2, 1, 2]]

但总的来说,最好使用一个循环,因为aList可能有很多项

>>> aList = [
...     [1,2,3,4,3,2],
...     [2,3,4,5,4,3],
...     [2,1,2,3,4,3]
... ]
>>> for item in aList:
...     item.reverse()
... 
>>> aList
[[2, 3, 4, 3, 2, 1], [3, 4, 5, 4, 3, 2], [3, 4, 3, 2, 1, 2]]

这两种方法都会修改aList,因此会破坏未修改的版本。下面是如何创建新列表并保持列表不变

>>> aList = [
...     [1,2,3,4,3,2],
...     [2,3,4,5,4,3],
...     [2,1,2,3,4,3]
... ]
>>> new_aList = []
>>> for item in aList:
...     new_aList.append(list(reversed(item)))
... 
>>> new_aList
[[2, 3, 4, 3, 2, 1], [3, 4, 5, 4, 3, 2], [3, 4, 3, 2, 1, 2]]

另一种反转列表的方法是使用这种扩展切片技巧。 -1表示按-1的步骤逐步执行列表。向后。

>>> new_aList = []
>>> for item in aList:
...     new_aList.append(item[::-1])
... 
>>> new_aList
[[2, 3, 4, 3, 2, 1], [3, 4, 5, 4, 3, 2], [3, 4, 3, 2, 1, 2]]

不是明确地创建一个空列表并附加到它,而是将这样的循环写成列表解析更常见

>>> new_aList = [item[::-1] for item in aList]
>>> new_aList
[[2, 3, 4, 3, 2, 1], [3, 4, 5, 4, 3, 2], [3, 4, 3, 2, 1, 2]]

答案 2 :(得分:1)

bList = []
for l in aList:
  l.reverse()
  bList.append(l)

答案 3 :(得分:0)

对于列表的更细粒度的操作,可以使用元组解包来交换值的位置(这可以巧妙地避免使用临时变量):

aList[0][1], aList[0][3] = aList[0][3], aList[0][1]

执行此操作后,第二个和第四个值将更改位置,因此aList[0]将如下所示:

[1, 4, 3, 2, 3, 2]