【问题标题】:What does `var = [ ... ]` do in Python? [duplicate]`var = [ ... ]` 在 Python 中有什么作用? [复制]
【发布时间】:2020-09-09 16:13:22
【问题描述】:

在我的 Python 程序中,有人告诉我这段代码是 sn-p:

listOfNumbers = input() # (This inputs a space separated list of integers)
listOfNumbers = listOfNumbers.split()

for x in range(0, len(listOfNumbers)):
    listOfNumbers[x] = int(x)

可以用这个单线代替:

listOfValues = [int(x) for x in input().split()]

我是Python新手,所以对很多代码缩短技术或方法不太了解,所以开始分析给出的sn-p。

我对为什么部分行用方括号括起来感到困惑:[int(x) for x in input().split()]

那段代码开头和结尾处的[] 有什么作用?

【问题讨论】:

  • 谷歌的术语是“列表理解”。
  • 它向 python 表明我们正在迭代并将值附加到列表中。
  • 这是一个列表理解。它使用内部 for 循环创建一个列表。
  • 阅读explanation-of-how-nested-list-comprehension-works 了解一些更复杂的列表理解。另请阅读documentation
  • 这不是真的。您的第一个代码根本不会更改列表的内容 - 当您在那里时,x=int(x) 仅适用于循环内的特定 x。不修改原始列表。

标签: python python-3.x


【解决方案1】:

这就是所谓的list comprehension

假设您要将数字行的前 5 个数字放入一个列表中。

完整的代码块可以写成:

myList = []
for i in range(1, 6):
    myList.append(i)

这可以简写为:

myList = [i for i in range(1, 6)]
myList
>>> [1, 2, 3, 4, 5]

它还有其他应用程序,但它可以用来在上面的较少行中创建一个列表。

如您所见,方括号也存在于主列表中,因此它突出了正在制作列表的事实。

如果您想制作字典,可以更清楚地看到这一点。

myDict = {key: 0 for key in range(1, 6)}
myDict
>>> {1: 0, 2: 0, 3: 0, 4: 0, 5: 0}

【讨论】:

  • 哇,你比我早了 6 秒! :-)
【解决方案2】:

列表推导是 Python 中的一种语法糖(更快)。 [] 是列表创建者:

x = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

列表理解将其简化为:

x = [x for x in range(0, 10 + 1)]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-12
    • 1970-01-01
    • 1970-01-01
    • 2021-08-29
    • 2020-08-20
    • 2011-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多