有一个格式问题,我想进一步了解/理解。我有以下代码:
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周围附加[]的集合,并且在输出中产生无括号的答案,这与前两个示例不同,前两个示例需要[]产生无括号的答案
我意识到这是一个奇怪且相当愚蠢的问题,因为我永远不会像这样构造单个元素列表。我只是看到它在网上其他地方的答案中被随意使用(不幸的是,没有任何解释)。作为新手,我只是好奇地扩大了对语言的了解。
谢谢。
答案 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将从迭代器中的每个元素中“解包”您的值,并将它们分配给x
和y
。如果您仅想在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中的元素是可迭代的。