【问题标题】:Creating and extending a list in one line在一行中创建和扩展列表
【发布时间】:2012-04-13 10:22:49
【问题描述】:
mylist=[]
mylist.append(7)
mylist.extend(range(9,12))

这样的事情可以在一行在python3中完成吗?

我觉得这应该是微不足道的,但由于某种原因,我不记得也找不到如何做到这一点。

【问题讨论】:

    标签: python python-3.x


    【解决方案1】:

    您可以将任何您想要的内容添加到列表构造函数中。例如:

    mylist = [7]
    

    或者:

    mylist = list(range(9,12))
    

    或者,将两者链接在一起:

    mylist = [7] + list(range(9,12))
    

    对于更复杂的结构,列表推导是可行的方法。例如:

    mylist = [ (irow,icol) for irow in range(1,10) for irow in range(1,10) if i > j ]
    

    有关列表推导的更多信息,请访问: http://docs.python.org/tutorial/datastructures.html#list-comprehensions

    已编辑以反映问题的变化)。

    【讨论】:

      【解决方案2】:

      你可以使用这一个班轮:

      mylist = [7] + list(range(9,12))
      

      它返回所需的列表:

      [7, 9, 10, 11]
      

      【讨论】:

      • 我想我错过了什么,因为for lid in [7] + range(9,len(row)): 给了我TypeError: can only concatenate list (not "range") to list
      • 这适用于 Python 2.7 —— 也许您正在使用其他版本?检查 mylist=... 分配是否适合您。
      • range 在 Py3 中不再提供预先计算的列表,但如果您愿意,您仍然可以明确地使用它:mylist = [7] + list(range(9, 12))
      【解决方案3】:

      如果您像其他人所说的那样使用 Python 2.*

      for lid in [7] + range(9,len(row)):
      

      会起作用

      如果使用 Python 3.*,因为 range 现在返回一个迭代器,您需要显式转换为列表

      选项 1:

      for lid in [7] + list(range(9,len(row))):
      

      选项 2:

      for lid in itertools.chain([7],range(9,len(row))):
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-08
        • 1970-01-01
        • 2017-04-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多