找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 175|回复: 6

[求助] for s in 一个LIST时有疑问

6

主题

10

帖子

10

积分

贫民

积分
10
饺子 发表于 2017-8-3 01:18:52 | 显示全部楼层 |阅读模式
L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
def by_name(t):
    for s in t :
        if isinstance(s,str) :
            return s.lower()
L2 = sorted(L, key=by_name)
print(L2)

上面代码执行后获得[('Adam', 92), ('Bart', 66), ('Bob', 75), ('Lisa', 88)]

可以提取到LIST里面全部的tuple

但如果单独执行for循环的话

L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
def by_name(t):
for s in t:
  return s
print(by_name(L))

为什么出来的结果只有第一个tuple  ('Bob', 75)???

回复

使用道具 举报

4

主题

64

帖子

64

积分

版主

Rank: 7Rank: 7Rank: 7

积分
64

活跃会员热心会员默默耕耘优秀版主论坛元老

北极 发表于 2017-8-3 01:24:50 | 显示全部楼层
仔细看你的for语句和print语句,for循环执行完后,return 返回最后一个值。然后再执行print当然是只输出最后一个值了。
你把print 放到for循环里面就能够输出所有值
回复 支持 反对

使用道具 举报

0

主题

2

帖子

2

积分

贫民

积分
2
龙凌霄 发表于 2017-8-3 20:29:16 | 显示全部楼层
我在刚学习的时候也犯过这种错误。。
回复 支持 反对

使用道具 举报

0

主题

25

帖子

25

积分

贫民

积分
25
cdbclx 发表于 2017-8-3 21:57:50 | 显示全部楼层
应该是 for 循环只执行了一次,就return 了,所以print的结果是第一个值
回复 支持 反对

使用道具 举报

6

主题

10

帖子

10

积分

贫民

积分
10
饺子  楼主| 发表于 2017-8-4 05:58:05 | 显示全部楼层
北极 发表于 2017-8-3 01:24
仔细看你的for语句和print语句,for循环执行完后,return 返回最后一个值。然后再执行print当然是只输出最 ...

懂啦,多谢版主啦
回复 支持 反对

使用道具 举报

6

主题

10

帖子

10

积分

贫民

积分
10
饺子  楼主| 发表于 2017-8-4 05:58:43 | 显示全部楼层
cdbclx 发表于 2017-8-3 21:57
应该是 for 循环只执行了一次,就return 了,所以print的结果是第一个值

懂啦,多谢啦
回复 支持 反对

使用道具 举报

6

主题

10

帖子

10

积分

贫民

积分
10
饺子  楼主| 发表于 2017-8-4 05:59:37 | 显示全部楼层
龙凌霄 发表于 2017-8-3 20:29
我在刚学习的时候也犯过这种错误。。

我也是刚刚才开始学习。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表