反转列表元组的顺序

2 投票
2 回答
1000 浏览
提问于 2025-04-18 05:38

我有一个元组,内容是 ([1,2,3], [4,5,6]),我想把里面的列表反转一下,让它变成 ([3,2,1],[6,5,4]),而不想新建一个元组再把元素加进去。我目前做到的最接近的是:

my_func(....):
   for i in tuple(...):
     i = i[::-1]
   return tuple(....) 

问题是,虽然我打印出来的结果是我想要的,但元组本身并没有改变。

2 个回答

0

正如 frostnational 所说,元组是不可变的,也就是说一旦创建就不能更改,所以你需要创建新的元组。

你可以这样做:

>>> a = ([1,2,3],[4,5,6])
>>> b = map(lambda t: reversed(t), a)
>>> for sublist in b:
...     for item in sublist:
...         print(item)
... 
3
2
1
6
5
4
8

元组是不可变的,也就是说一旦创建就不能改变。但是,元组里面的对象可以是可变的或者不可变的。如果我们修改了元组中某个可变对象,那么这个变化会在所有引用这个对象的地方都能看到,包括元组本身。

在这个例子中,我们有列表,所以我们只需要遍历元组,然后对每个列表调用 .reverse() 方法来反转它们。

>>> t = ([1,2,3], [4,5,6])
>>> for x in t:
...     x.reverse()
...     
>>> t
([3, 2, 1], [6, 5, 4])

另一个例子:

>>> x = [1, 2, 3]
>>> t = (x, 'abc')
>>> x.reverse()
>>> t
([3, 2, 1], 'abc')
>>> x
[3, 2, 1]

撰写回答