python 基本 for 循环/列表理解

标签 python for-loop list-comprehension

假设我有:

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/

相关文章:

python - 让机器人在完成工作后自动退出

python - 一行 "x = for... if y not in x"

javascript - For 循环只运行一次,附加条件检查数字是否为偶数

python - 使用另一个枚举列表作为键的更优雅的列表理解

python - 保存模型时确保原子性

javascript - 为什么我的 for 循环在一次迭代后停止?

javascript - JQuery for 循环和数组 - 为什么这个变量未定义?

python - 使用 Python 列表推导计算列表中的正整数元素

解析元组的 Pythonic 方式

python - 从基本模型实例转换为 Django 中的派生代理模型?