Appending a range to a list

与世无争的帅哥 提交于 2020-01-02 05:24:07

问题


I have some basic code that I'm not grasping the behaviour of:

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

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

print len(L + range(1))

print len(L)

The output of which is

4
5
4

This is confusing to me, as my thought process is that the length of the initial list is 3, and appending range(2) to the end brings it to length of 5. Therefore I'd expect the output to be 5 6 5. I'm sure it's a simple quirk, but I'm a bit lost and having a hell of a time trying to find an answer online. Would anyone be able to point me in the right direction?


回答1:


You appended a single list object. You did not add the elements from the list that range produces to L. A nested list object adds just one more element:

>>> L = ['a', 'bb', 'ccc']
>>> L.append(range(2))
>>> L
['a', 'bb', 'ccc', [0, 1]]

Note the [0, 1], the output of the range() function.

You are looking for list.extend() instead:

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

As an alternative to list.extend(), in most circumstances you can use += augmented assignment too (but take into account the updated L list is assigned back to L, which can lead to surprises when L was a class attribute):

>>> L = ['a', 'bb', 'ccc']
>>> L += range(2)
>>> L
['a', 'bb', 'ccc', 0, 1]


来源:https://stackoverflow.com/questions/42437608/appending-a-range-to-a-list

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!