【问题标题】:Reversing order of a tuple of list反转列表元组的顺序
【发布时间】:2014-05-07 07:42:37
【问题描述】:

我有一个元组 ([1,2,3], [4,5,6]),我想反转里面的列表,使它变成 ([3,2,1],[6,5, 4]) 无需创建新元组并向其添加元素。我得到的最接近的是:

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

问题是当我打印出我想要的东西时..元组从未改变过

【问题讨论】:

    标签: python list python-3.x tuples


    【解决方案1】:

    元组是不可变的,但它们包含的对象可以是可变的或不可变的,所以如果我们修改元组包含的可变对象,那么更改将反映在该对象的所有引用上,包括元组也是.

    在这种情况下,我们有列表,所以,我们需要做的就是遍历元组并在列表上调用 .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]
    

    【讨论】:

      【解决方案2】:

      正如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
      

      【讨论】:

      • 没有。元组仅包含对列表的引用。引用将是相同的,但列表本身是可变的。这样可以反转列表的内容。元组仍然是不可变的。将常量元组内容视为列表标识符的常量序列。事实是这样的列表不能用作字典的键。这是因为这样的元组是不可散列的。
      • 好点,在这种情况下,列表可能会被修改。有时保持数据不可变仍然很有用,因为其他人可能依赖于这些列表不会更改的事实。另外,我们这里没有创建新的列表,只有小的迭代器,所以内存消耗很少。
      猜你喜欢
      • 2020-09-07
      • 2021-02-22
      • 2011-12-18
      • 1970-01-01
      • 2010-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-05
      相关资源
      最近更新 更多