将一个范围添加到列表中

12

我有一些基础代码,但我不太理解它的行为:

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

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

print len(L + range(1))

print len(L)

输出结果为

4
5
4
这对我来说很困惑,因为我的思考过程是,初始列表的长度为3,将 range(2) 添加到末尾会使其长度为5。因此,我期望输出应该是 5 6 5。我相信这只是一个简单的问题,但我有点迷失了,并且在网上寻找答案非常艰难。是否有人能够指点我一下方向?

.append(range(2)) 向列表中添加 恰好一个元素,总是如此。因此,您已将 [0, 1] 添加到该列表中。 - juanpa.arrivillaga
1
"append"和"extend"不是一回事。尝试使用"print(L)",你就会明白。 - Aran-Fey
2个回答

27

你添加了一个单独的列表对象。但是你没有将range生成的元素添加到L中,该列表中添加。嵌套的列表对象只添加一个更多的元素:

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

请注意[0, 1],这是range()函数的输出结果。

你需要使用list.extend()方法代替:

>>> L = ['a', 'bb', 'ccc']
>>> L.extend(range(2))
>>> L
['a', 'bb', 'ccc', 0, 1]
>>> len(L)
5
作为list.extend()的替代方法,在大多数情况下,您也可以使用+=增强赋值运算符(但请注意更新后的L列表被分配回L,如果L是类属性,则可能会导致意外情况,请参见此处):
>>> L = ['a', 'bb', 'ccc']
>>> L += range(2)
>>> L
['a', 'bb', 'ccc', 0, 1]

0

在列表的任意位置插入一系列项目

 g=[1,2,3,4,7,8]        
    z=[5,6]
    def insertRange(start,YourList,anotherlist):
        if isinstance(YourList,list) and isinstance(anotherlist,list) :
            YourlistPart1=YourList[0:start]
            YourlistPart2=YourList[start:]
            YourlistPart1.extend(anotherlist)
            YourlistPart1.extend(YourlistPart2)
            print(YourlistPart1)
    
    insertRange(4,g,z)

你不能在Python中的特定位置插入范围,但可以通过使用extend函数来绕过此问题,您可以将列表拆分为两个部分,先扩展第一部分,然后再合并这两个列表。如果您希望从索引3开始插入,则start参数不是从0开始,例如在本例中,您从3开始插入。
总结:
从1开始,将列表添加到索引0之后并移动其他元素。
从4开始,将列表添加到索引3之后并移动其他元素。
从5开始,将列表添加到索引4之后。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接