我玩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']]
或我怎样才能得到这个结果?
答案 0 :(得分:5)
两个问题:
list.reverse
方法就地修改列表并且不返回任何内容(即返回None
)。您可能希望改为使用reversed
方法。bra
列表中的前两个元素都指向相同的基础对象。因此,当您修改该对象时,前两个元素都会再次引用相同的修改对象,这就是为什么您会看到前两个元素的['t', 'a']
。如果要使用单独的对象而不是对同一对象的引用,可以使用切片运算符进行复制:
bra.append(put[:]) # Appends a copy of 'put'
作为reversed
方法的替代方法,您还可以使用切片运算符,步长为-1来反转可迭代,但对于某些人来说,代码正在做的事情并不明显:
bra.append(put[::-1]) # Equivalent to bra.append(reversed(put))