使用括号在python中进行循环

时间:2018-10-11 23:33:28

标签: python

有一个格式问题,我想进一步了解/理解。我有以下代码:

In[1]:
mylist = [[99]]
for [x] in mylist:
    print(x)

Out[1]:
99

我的主要问题是关于第二行x周围的[]。因此,我在描述循环的“ x”变量之前从未使用过[]。由于我的输出是99,而不是[99],因此看起来[]会要求循环从其附加的括号集中提取数字。

根据回复更新的问题:

如果我更改代码以删除括号:

In[1]:
mylist = [[99]]
for x in mylist:
    print(x)

Out[1]:
[99]

我得到[99]而不是99。但是,如果执行以下操作:

In[1]:
mylist = [[99,100]]
for x,y in mylist:
    print(x)
    print(y)

Out[1]:
99
100

上面的示例不需要在x,y周围附加[]的集合,并且在输出中产生无括号的答案,这与前两个示例不同,前两个示例需要[]产生无括号的答案

我意识到这是一个奇怪且相当愚蠢的问题,因为我永远不会像这样构造单个元素列表。我只是看到它在网上其他地方的答案中被随意使用(不幸的是,没有任何解释)。作为新手,我只是好奇地扩大了对语言的了解。

谢谢。

3 个答案:

答案 0 :(得分:2)

执行此操作时:

>>> myList = [[99]]
>>> for x in myList:
    print x

Python将其解释为“以可迭代方式打印每个元素”。

执行此操作时:

>>> myList = [[99,100], [99,101], [99, 102]]
>>> for x in myList:
    print x

Python still 将其解释为“以可迭代的方式打印每个元素”,以便您获得此信息:

[99, 100]
[99, 101]
[99, 102]

但是,如果您这样做:

>>> myList = [[99,100], [99,101], [99, 102]]
>>> for x, y in myList:
    print x, y

Python将从迭代器中的每个元素中“解包”您的值,并将它们分配给xy。如果您仅想在myList = [[99]]的情况下执行上述操作,Python需要使用for [x] in myList语法,以便从列表中解压缩单个值。

在Python中“解压缩”可迭代项的功能非常强大。您可以通过解包可迭代对象来动态分配变量。在您的情况下,您可以想象必须将lat lon分配为变量或其他变量。您还可以将值解压缩到函数的参数中。

在Python 3中,您还可以执行以下操作:

x = [1,2,3,4]
first, *rest = x
print (first) # 1
print (rest) # [2,3,4]

答案 1 :(得分:1)

对于第二个示例,列表的长度为2,可以解压缩两个值

In[1]:
myList = [[99,100]]
for x, y in myList: 
    print(x)
    print(y)

Out[1]:
99
100

答案 2 :(得分:1)

根据Python documentation,在赋值和循环构造中,方括号基本上被忽略。

作为对user2774697's answer的补充,for [x, y] in L等效于for ([x, y]) in L,等效于for (x, y) in L,也等效于{ chart: { type: 'bar' }, title: { text: '' }, xAxis: { categories: ['Document', 'Image', 'Audio', 'CAD', 'Zip'], title: { text: 'File Type', align: 'high', offset: 0, rotation: 0, y: -10, x: -15 }, lineColor: 'transparent', minorTickLength: 0, tickLength: 0, labels: { style: { } } }, yAxis: { opposite: true, title: { text: '# Files', align: 'middle', style: { /* TODO: Modify styles to accommodate the bars header */ color: '#000000' } }, tickInterval: 2, gridLineColor: 'transparent', labels: { enabled: false } }, tooltip: { valueSuffix: ' millions' }, plotOptions: { bar: { dataLabels: { enabled: true } } }, legend: { layout: 'vertical', align: 'right', verticalAlign: 'top', x: -40, y: 80, floating: true, borderWidth: 1, backgroundColor: ('#FFFFFF'), shadow: true, enabled: false }, credits: { enabled: false }, series: [{ name: '', data: [56, 30, 15, 11, 5], maxPointWidth: 8 }], colors: this.colors || defaultColors }

方括号与裸圆括号不同的是,它强制执行拆包行为,它要求L中的元素是可迭代的。