【问题标题】:Python reverse list in iterator迭代器中的Python反向列表
【发布时间】:2013-10-05 16:27:47
【问题描述】:

我希望从嵌套列表的列表中创建两个字典:

M = {index of list: list}

N = {index of list: reversed list}

例子:

对于初学者,我有以下列表:

L =  [[20, 56], [23, 24], [23, 12], [22, 21], [26, 48], [26, 24]]

所以最终结果是:

M = {0: [56, 20], 1: [24, 23], 2: [12, 23], 3: [21, 22], 4: [48, 26], 5: [24, 26]}
N = {0: [20, 56], 1: [23, 24], 2: [23, 12], 3: [22, 21], 4: [26, 48], 5: [26, 24]}

我已经试过了:

M = {}
N = {}
for index, pair in enumerate(L):
    M[index] = pair
    N[index] = pair.reverse()

但是这样做的结果是:

M = {0: [56, 20], 1: [24, 23], 2: [12, 23], 3: [21, 22], 4: [48, 26], 5: [24, 26]}
N = {0: [56, 20], 1: [24, 23], 2: [12, 23], 3: [21, 22], 4: [48, 26], 5: [24, 26]}

我已经解决了:

N[index] = pair[::-1]

但是有人可以告诉我为什么会这样吗?

【问题讨论】:

  • 我不确定我是否相信您的结果。 .reverse() 就地执行并返回 None,所以你不应该得到 N == {0: None, 1: None, 2: None, 3: None, 4: None, 5: None} 吗?

标签: python list reverse


【解决方案1】:

list.reverse 是就地操作,因为两个字典中的键都指向同一个对象,因此所有引用都会受到影响。

>>> a = [1, 2, 3]
>>> b = a
>>> a.reverse()
>>> a
[3, 2, 1]
>>> b
[3, 2, 1]

要获取列表的新反向副本,您可以使用 a[::-1]list(reversed(a))

>>> a = [1, 2, 3]
>>> b = a[::-1]
>>> b is a
False
>>> b = list(reversed(a))
>>> b is a
False

但是如果你想要一个反向列表,如果你想要一个迭代器,那么a[::-1] 应该总是优先于list(reversed(a)),如果你想要一个迭代器去reversed(a)

【讨论】:

  • 好的,明白了。我忘了python中的名字和对象是不一样的。
【解决方案2】:

正如@hcwhsa 所提到的,list.reverse 将就地修改列表。如果您不想就地执行,可以执行以下操作:

>>> l[::-1]
[3, 2, 1]
>>> l
[1, 2, 3]

【讨论】:

    【解决方案3】:

    以相反顺序获取列表/字符串/元组的另一种方法是 a[::-1]。这会将 a 的元素从最后一个到第一个返回,作为一个副本——而不修改 a。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-27
      • 2015-05-20
      • 2013-02-07
      • 2012-07-14
      • 2015-11-07
      • 1970-01-01
      • 2021-04-11
      相关资源
      最近更新 更多