将范围附加到列表

Moc*_*ock 2 python list python-2.x

我有一些基本的代码,我没有抓住以下行为:

L = [ 'a', 'bb', 'ccc' ]

L.append(range(2))
print len(L)

print len(L + range(1))

print len(L)
Run Code Online (Sandbox Code Playgroud)

其输出是

4
5
4
Run Code Online (Sandbox Code Playgroud)

这让我感到困惑,因为我的思维过程是初始列表的长度是3,并且追加range(2)到末尾会使它达到5的长度.因此我期望输出为5 6 5.我确定这是一个简单的怪癖,但我有点失落,并且有一段时间试图在网上找到答案.有人能指出我正确的方向吗?

Mar*_*ers 10

您附加了一个列表对象.您没有添加的元素该列表range产生到L.嵌套列表对象只添加一个元素:

>>> L = ['a', 'bb', 'ccc']
>>> L.append(range(2))
>>> L
['a', 'bb', 'ccc', [0, 1]]
Run Code Online (Sandbox Code Playgroud)

注意[0, 1],range()函数的输出.

你正在寻找list.extend():

>>> L = ['a', 'bb', 'ccc']
>>> L.extend(range(2))
>>> L
['a', 'bb', 'ccc', 0, 1]
>>> len(L)
5
Run Code Online (Sandbox Code Playgroud)

作为替代方案list.extend(),在大多数情况下,您也可以使用+=扩充分配(但考虑到更新的L列表被分配回来L,这可能会导致L类属性时出现意外):

>>> L = ['a', 'bb', 'ccc']
>>> L += range(2)
>>> L
['a', 'bb', 'ccc', 0, 1]
Run Code Online (Sandbox Code Playgroud)