【问题标题】:Appending a range to a list将范围附加到列表
【发布时间】:2017-07-15 05:23:29
【问题描述】:

我有一些基本代码,我没有掌握以下行为:

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。因此我希望输出为 @987654324 @。我敢肯定这是一个简单的怪癖,但我有点迷茫,并且有一段时间试图在网上找到答案。有人能指出我正确的方向吗?

【问题讨论】:

  • .append(range(2))恰好一个元素添加到列表中,总是。因此,您已将 [0, 1] 添加到该列表中。
  • appendextend 不同。试试print(L),你就会明白了。

标签: python list python-2.x


【解决方案1】:

您附加了一个列表对象。您没有将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,可以lead to surprises when L was a class attribute):

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

【讨论】:

    【解决方案2】:

    插入一系列项目或在任何地方列出

     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 来解决您可以拆分列表扩展第一部分,然后再次合并 2 个列表 start= 如果您愿意,它不会从 0 开始在以 3 开头的示例中从索引 3 which = 4 开始插入

    总结

    从 1 开始在索引 0 之后添加列表并移动其他元素

    从 4 开始在索引 3 之后添加列表并移动其他元素

    从 5 开始在索引 4 之后添加列表

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-24
      • 2020-10-01
      • 1970-01-01
      • 2020-08-29
      • 2013-11-29
      • 1970-01-01
      相关资源
      最近更新 更多