鱼C论坛

 找回密码
 立即注册
查看: 1948|回复: 4

列表推导式

[复制链接]
发表于 2023-5-4 15:29:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 lzb1001 于 2023-5-4 15:31 编辑

>>> list1 = [x**2 for x in range(10)]
>>> list1
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

相当于:

list1 = []
for x in range(10):
    list1.append(x**2)


我按上面说的测试:

>>> list1 = []
>>> for x in range(10):
        list1.append(x ** 2)
        print(list1)

       
[0]
[0, 1]
[0, 1, 4]
[0, 1, 4, 9]
[0, 1, 4, 9, 16]
[0, 1, 4, 9, 16, 25]
[0, 1, 4, 9, 16, 25, 36]
[0, 1, 4, 9, 16, 25, 36, 49]
[0, 1, 4, 9, 16, 25, 36, 49, 64]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-4 15:31:00 | 显示全部楼层
你的例子展示了如何用两种方法创建一个包含前10个平方数的列表。第一种方法是使用列表推导式(list comprehension),第二种方法是使用普通的for循环。

列表推导式是一种简洁的方式来创建列表,它在一行代码中完成了循环和列表添加操作。如你所示:
list1 = [x**2 for x in range(10)]

这一行代码相当于下面这段普通的for循环:
list1 = []
for x in range(10):
    list1.append(x**2)

当你在第二种方法中加入了 print(list1) ,你展示了在每次循环时列表是如何逐步添加元素的。因此,每一次循环后,列表会变得越来越长,直到最后包含所有的平方数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-4 16:54:50 | 显示全部楼层
你的问题是什么?不会?
如果是不会的话,

以下是对你提供的代码的解释:

这段代码使用列表生成式创建了一个名为list1的列表,其中包含从0到9每个数的平方。在循环中,range(10)函数产生一个从0到9的整数序列,对于每个整数x,x**2计算出它的平方,并添加到list1列表中。最终,list1列表包含了所有0到9之间整数的平方。

在第二段代码中,使用for循环和append方法手动实现了与列表生成式相同的操作。代码中的循环执行了10遍,每次迭代都把当前整数的平方加入list1列表。在每次迭代结束时,打印一下list1列表,可以看到该列表不断增长,直到包含所有0到9之间整数的平方。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-4 17:29:55 | 显示全部楼层
本帖最后由 lzb1001 于 2023-5-4 18:53 编辑

>>> list1 = ['1.Just do it!', '2.一切皆有可能!', '3.让编程改变世界!', '4.Impossible is Nothing!']
>>> list2 = ['4.阿迪达斯', '2.李宁', '3.鱼C工作室', '1.耐克']
>>> list3 = [name + ':' + slogan[2:] for slogan in list1 for name in list2 if slogan[0] == name[0]]
>>> print(list3)
['1.耐克:Just do it!', '2.李宁:一切皆有可能!', '3.鱼C工作室:让编程改变世界!', '4.阿迪达斯:Impossible is Nothing!']
>>> for each in list3:
        print(each)

       
1.耐克:Just do it!
2.李宁:一切皆有可能!
3.鱼C工作室:让编程改变世界!
4.阿迪达斯:Impossible is Nothing!


我的问题是针对 list3 = [name + ':' + slogan[2:] for slogan in list1 for name in list2 if slogan[0] == name[0]]

1.小甲鱼不是说不要使用连接符+来拼接字符串吗?

2、list3的推导式有点看不明白:
(1)slogan[2:]是指list1中去除序号和点以后的内容?为什么可以这样表示?我特地测试了下面的
>>> str1 = 'laizhibin'
>>> str1[2]
'i'
>>> str1[2:]
'izhibin'

>>> str2 = ['laizhibin']
>>> str2[2]
Traceback (most recent call last):
  File "<pyshell#165>", line 1, in <module>
    str2[2]
IndexError: list index out of range
>>> str2[2:]
[]

>>> str3 = ['1.Just do it!', '2.一切皆有可能!', '3.让编程改变世界!', '4.Impossible is Nothing!']
>>> str3[2]
'3.让编程改变世界!'
>>> str3[2:] # 与slogan[2:]返回结果完全不同!!!
['3.让编程改变世界!', '4.Impossible is Nothing!']

(2)slogan[0]和name[0]分别是指list1和list2中的序号吧?为什么可以这样表示?

(3)slogan[0] == name[0]是为了在list1和list2中通过序号建立一一对应的关联关系?

3、生成结果为何会按1-4的顺序排列呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-4 18:14:45 | 显示全部楼层
本帖最后由 陈星钰 于 2023-5-4 18:18 编辑

那个slogan[2:]是什么意思,为什么要切片啊
后面的if语句是为了通过下标索引进行的对齐吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-23 09:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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