假设我有:
list=[('mike', 22.0), ('john', 33.0)]
我想打印一个仅包含数字的列表,从最小到最大。我尝试这样做:
for s in list:
print(sorted(s[1]))
但它说“int 对象不可迭代”?
如果我这样做,它会起作用(输出为:[22,33])
print (sorted(s[1] for s in list))
第二次尝试如何进行?第一次和第二次尝试有什么区别?很难理解列表理解技术。
顺便说一句,最终目标是打印得分最低的人的姓名。但在将名称与标记联系起来之前,我会先尝试理解这一部分。不过,Dict 将使分配键值变得更加容易
最佳答案
当你这样做时:
for s in list:
print(sorted(s[1]))
您正在尝试对 int
进行排序。 sorted
函数需要一个iterable
(例如,一个列表)。因此你的错误。这是显而易见的,因为:
for s in list:
print(s[1])
打印:
22.0
33.0
另一方面,当你这样做时:Sorted(s[1] for s in myList)
,你正在对一个列表进行排序(实际上你正在对一个生成器进行排序,但有一点细线)。尝试:
newList = [s[1] for s in myList]
newList
你会发现你实际上是在对列表进行排序。对列表进行排序很有意义,但对单个数字进行排序则没有意义。 Sorted
是一个返回排序列表的函数。为了说明生成器和可迭代对象(如列表、元组和字典)之间的区别,请将最后一个片段与下面的片段进行比较:
newGenerator = (s[1] for s in myList)
print(newGenerator) #probably won't give what you ever need
for item in newGenerator:
print item #this will iterate through the items in the generator and print them
我以为您希望对群组进行排序,但其他人已经回答了这个问题,但被否决了,所以我没有添加它。以下是您将如何做到这一点:
myList.sort(key = lambda x: x[1])
然后:
myList[0][0]
将是最低层的人的名字。
在本例中,sort
是一个方法,它对 myList 进行操作并更改它。如果您向其传递 key = lambda x: x[1]
参数,它将根据位置 1
对列表进行排序。因此,如果您的数字在元组中处于不同的位置,您将在那里使用不同的数字。 lambda
只是一种动态创建函数的方法,在本例中,该函数仅获取 1
元素(第二个元素)。
关于python 基本 for 循环/列表理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33049051/