2

我玩python 2.7。这是我的问题:

>>> bra=[]
>>> put=['a','t']
>>> bra.append(put)
>>> bra
[['a', 't']]
>>> bra.append(put)
>>> bra
[['a', 't'], ['a', 't']]
>>> bra.append(put.reverse())
>>> bra
[['t', 'a'], ['t', 'a'], None]

我的问题是:为什么 de python 解释器在最后一行给出这个结果,而不是这个:

[['a', 't'], ['a', 't'], ['t', 'a']]

或者我怎样才能得到这个结果?

4

2 回答 2

5

两个问题:

  1. list.reverse方法就地修改列表并且不返回任何内容(即返回None)。您可能想改用该reversed方法。
  2. 列表中的前两个元素都bra引用同一个底层对象。因此,当您修改该对象时,前两个元素再次引用同一个修改后的对象,这就是您看到['t', 'a']前两个元素的原因。

如果要使用单独的对象而不是对同一对象的引用,可以使用切片运算符进行复制:

bra.append(put[:])  # Appends a copy of 'put'

作为该方法的替代reversed方法,您还可以使用步长为 -1 的切片运算符来反转可迭代对象,尽管对某些人来说,代码在做什么并不那么明显:

bra.append(put[::-1])  # Equivalent to bra.append(reversed(put))
于 2012-11-08T20:55:49.817 回答
4

list.reverse()就地修改列表,不返回任何内容,相当于返回None.

你需要reversed(put). 这个函数确实返回了可迭代的反转版本。

于 2012-11-08T20:53:42.790 回答