鉴于这两个变量:
Row = [Row(name='a', age=12, gender='man', score='123'), Row(name='b', age=23, gender='woman', score='110'), Row(name='c', age=120, gender='man', score='60')]
和
headers = ('name', 'age', 'gender', 'score')
当我循环遍历它们以获得每行中带有加号的最大项目时,我得到以下内容:
for i in range(4):
print(max([str(x[i]) for x in Row]+[headers[i]]))
...
name
age
woman
score
但是当我用逗号替换加号时,我得到以下内容:
for i in range(4):
print(max([str(x[i]) for x in Row],[headers[i]]))
...
['name']
['age']
['man', 'woman', 'man']
['score']
所以,基本上我的问题是,加号是做什么的?通常我会用逗号分隔迭代,调用max函数,就像这个max(list1, list2)
但在这个例子中max
函数被调用像这样max(list1+list2)
它将列表添加到一起,例如
list1 = [1,2,3,4]
list2 = ['frog', 'dog']
print(list1 + list2)
[1, 2, 3, 4, 'frog', 'dog']
它连接列表,也就是说它将两个列表连接成一个大列表:
>>> a = [1, 2, 3]
>>> b = ['x', 'y', 'z']
>>> c = a+b
>>> print(c)
[1, 2, 3, 'x', 'y', 'z']
如果你有一个print
语句后跟逗号分隔的项目,那么它将只打印那些以空格分隔的项目。
>>> print(a,b)
[1, 2, 3] ['x', 'y', 'z']
当你打电话给max(list1, list2)
时,这意味着,“看看这两个项目,list1
和list2
,并返回一个'最大'的值。”当你打电话给max(list1+list2)
时,这意味着,“将list1
和list2
组合成一个大名单,然后从该组合列表中选出'最大'项目。”我在这里引用了“最大”这个词,因为max()
也适用于非数字项目。
>>> d = [7, 8, 9]
>>> e = [0, 75, 21]
>>> print(max(d,e))
[7, 8, 9]
>>> print(max(d+e))
75
第一个返回[7, 8, 9]
的原因是因为Python认为这比[0, 75, 21]
“更大”。那是因为在比较两个列表时,Python会按字典顺序检查它。 7大于0,所以:
>>> d > e
True
它将两个列表合并为一个大列表。
# The two different lists
letters = ['a','b','c']
numbers = [1,2,3]
# The plus sign
print(letter + number)
# Your result
['a','b','c',1,2,3]