鱼C论坛

 找回密码
 立即注册
查看: 14576|回复: 58

[知识点备忘] 第025讲:列表(VII)

[复制链接]
发表于 2020-8-19 03:28:16 | 显示全部楼层 |阅读模式
购买主题 已有 25 人购买  本主题需向作者支付 5 鱼币 才能浏览
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-19 07:29:29 | 显示全部楼层
沙发
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-5-17 15:55:33 | 显示全部楼层
列表推导式的高级用法:
words
['Great', 'FishC', 'Brilliant', 'Excellent', 'Fantanstic']
>>> fwords =[ w for w in words if w[0] == "F"]
>>> fwords
['FishC', 'Fantanstic']
>>> matrix =[[1,2,3];
         
SyntaxError: invalid syntax
>>> matrix =[[1,2,3],
         [4,5,6],
         [7,8,9]]
>>> flatten =[col for row in matrix for col in row]
>>> flatten
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> flatten =[]
>>> for row in matrix:
        for col in row:
                flatten.append(col)

               
>>> flatten
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> [ x + y for x in "FishC" for y in "FishC"]
['FF', 'Fi', 'Fs', 'Fh', 'FC', 'iF', 'ii', 'is', 'ih', 'iC', 'sF', 'si', 'ss', 'sh', 'sC', 'hF', 'hi', 'hs', 'hh', 'hC', 'CF', 'Ci', 'Cs', 'Ch', 'CC']
>>> [ x + y for x in "fishc" for y in "FISHC"]
['fF', 'fI', 'fS', 'fH', 'fC', 'iF', 'iI', 'iS', 'iH', 'iC', 'sF', 'sI', 'sS', 'sH', 'sC', 'hF', 'hI', 'hS', 'hH', 'hC', 'cF', 'cI', 'cS', 'cH', 'cC']
>>> _ =[]
>>> for x in "fishc":
        for y in "FISHC":
                _.append(x+y)

               
>>> _
['fF', 'fI', 'fS', 'fH', 'fC', 'iF', 'iI', 'iS', 'iH', 'iC', 'sF', 'sI', 'sS', 'sH', 'sC', 'hF', 'hI', 'hS', 'hH', 'hC', 'cF', 'cI', 'cS', 'cH', 'cC']
>>> [[x,y] for x in range(10) if x %2 == 0 for y in range(10) if y %3 == 0]
[[0, 0], [0, 3], [0, 6], [0, 9], [2, 0], [2, 3], [2, 6], [2, 9], [4, 0], [4, 3], [4, 6], [4, 9], [6, 0], [6, 3], [6, 6], [6, 9], [8, 0], [8, 3], [8, 6], [8, 9]]
>>> _ = []
>>> for x in range(10):
        if x%2 == 0:
                for y in range(10):
                        if y %3 == 0:
                                _.append([x,y])

                               
>>> _
[[0, 0], [0, 3], [0, 6], [0, 9], [2, 0], [2, 3], [2, 6], [2, 9], [4, 0], [4, 3], [4, 6], [4, 9], [6, 0], [6, 3], [6, 6], [6, 9], [8, 0], [8, 3], [8, 6], [8, 9]]
>>>

点评

我很赞同!: 5.0
我很赞同!: 5
  发表于 2023-8-17 08:55

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
Blueskyyy + 5 + 5 + 3 鱼C有你更精彩^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 6 反对 0

使用道具 举报

发表于 2021-5-19 11:00:25 | 显示全部楼层
**1.再谈列表推导式**

B不是一个二维列表,只是对同一个列表的三次引用

>>> B = [[0] * 3] * 3
>>> B
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
>>> B[1][1] = 1
>>> B
[[0, 1, 0], [0, 1, 0], [0, 1, 0]]

创建二维列表A

>>> A = [0] * 3
>>> for i in range(3):
        A[i] = [0] * 3
>>> A
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
>>> A[1][1] = 1
>>> A
[[0, 0, 0], [0, 1, 0], [0, 0, 0]]

用列表推导式创建嵌套列表

>>> S = [[0] * 3 for i in range(3)]
>>> S
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
>>> S[1][1] = 1
>>> S
[[0, 0, 0], [0, 1, 0], [0, 0, 0]]

列表推导式还可以添加一个用于筛选的if分句
[expression for target in iterable if condition]

>>> even = [i for i in range(10) if i % 2 == 0]
>>> even
[0, 2, 4, 6, 8]

先执行for语句,在执行if语句,最后执行左侧的表达式

>>> even = [i + 1 for i in range(10) if i % 2 == 0]
>>> even
[1, 3, 5, 7, 9]

从这五个单词中筛选出‘F’开头的单词

>>> words = ["Great", "FishC", "Brilliant", "Excellent", "Fantistic"]
>>> words = ["Great", "FishC", "Brilliant", "Excellent", "Fantastic"]
>>> fwords = [w for w in words if w[0] == 'F']
>>> fwords
['FishC', 'Fantastic']

列表推导式还可以变得更复杂一些,那就是实现嵌套
[expression for target1 in iterable1
                     for target2 in iterable2
                                                       ...
                                         for targetN in iterableN]
                                         
将二维列表降级为一维列表

>>> matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> flatten = [col for row in matrix for col in row]
>>> flatten
[1, 2, 3, 4, 5, 6, 7, 8, 9]

转换成循环的实现

>>> flatten = []
>>> for row in matrix:
        for col in row:
                flatten.append(col)

               
>>> flatten
[1, 2, 3, 4, 5, 6, 7, 8, 9]

笛卡尔乘积

>>> [x + y for x in "fishc" for y in "FISHC"]
['fF', 'fI', 'fS', 'fH', 'fC', 'iF', 'iI', 'iS', 'iH', 'iC', 'sF', 'sI', 'sS', 'sH', 'sC', 'hF', 'hI', 'hS', 'hH', 'hC', 'cF', 'cI', 'cS', 'cH', 'cC']

转换成循环

>>> _ = []
>>> for x in "fishc":
        for y in "FISHC":
                _.append(x + y)

               
>>> _
['fF', 'fI', 'fS', 'fH', 'fC', 'iF', 'iI', 'iS', 'iH', 'iC', 'sF', 'sI', 'sS', 'sH', 'sC', 'hF', 'hI', 'hS', 'hH', 'hC', 'cF', 'cI', 'cS', 'cH', 'cC']

[某个变量名是临时的或者无关紧要的,就可以直接用一个下划线当变量名]

列表推导式的终极用法
[expression for target1 in iterable1 if condition1
                     for target2 in iterable2 if condition2
                                                                 ...
                                         for targetN in iterableN if conditionN]

举例

>>> [[x, y] for x in range(10) if x % 2 == 0 for y in range(10) if y % 3 == 0]
[[0, 0], [0, 3], [0, 6], [0, 9], [2, 0], [2, 3], [2, 6], [2, 9], [4, 0], [4, 3], [4, 6], [4, 9], [6, 0], [6, 3], [6, 6], [6, 9], [8, 0], [8, 3], [8, 6], [8, 9]]

转换成循环

>>> _ = []
>>> for x in range(10):
        if x % 2 == 0:
                for y in range(10):
                        if y % 3 == 0:
                                _.append([x, y])

                               
>>> _
[[0, 0], [0, 3], [0, 6], [0, 9], [2, 0], [2, 3], [2, 6], [2, 9], [4, 0], [4, 3], [4, 6], [4, 9], [6, 0], [6, 3], [6, 6], [6, 9], [8, 0], [8, 3], [8, 6], [8, 9]]

程序设计原则“KISS”(全称:Keep It Simple & Stupid)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 6 反对 0

使用道具 举报

发表于 2021-7-26 15:45:29 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-8-6 23:07:39 | 显示全部楼层
嵌套实现更多
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-12 16:04:20 | 显示全部楼层
打卡025
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-13 08:15:26 | 显示全部楼层
已复习,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-12 17:02:20 | 显示全部楼层
阵亡
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-10-20 23:10:43 | 显示全部楼层
加油
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-11-28 21:44:20 | 显示全部楼层
混鱼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-12-17 10:08:55 | 显示全部楼层
#一、用列表推导式创建二维列表

list_ = [[0]*3 for x in range(3)]
print(list_)


#二、找到首字母为F的单词

words = ["FishC","Billon","Fatastic"]
fwords = [i for i in words if i[0] == 'F']
print(fwords)

#三、笛卡尔乘积

#临时变量用_/__命名

#列表推导式法
_ = [x + y for x in "FishC" for y in "fishc"]
print(_)


#循环法
__= []
for x in "FishC":
    for y in "fishc":
        __.append(x+y)

print(__)        

#四、找出[0,10)以内是2的倍数的数和是2的倍数的数的所有排列组合

#列表推导式
_ = [[x,y] for x in range(10) if x % 2 == 0 for y in range(10) if y % 3 == 0]
print(_)

#循环法
__ = []
for x in range(10):
    if x % 2 == 0:
        for y in range(10):
            if y % 3 == 0:
                __.append([x,y])
print(__)
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
['FishC', 'Fatastic']
['Ff', 'Fi', 'Fs', 'Fh', 'Fc', 'if', 'ii', 'is', 'ih', 'ic', 'sf', 'si', 'ss', 'sh', 'sc', 'hf', 'hi', 'hs', 'hh', 'hc', 'Cf', 'Ci', 'Cs', 'Ch', 'Cc']
['Ff', 'Fi', 'Fs', 'Fh', 'Fc', 'if', 'ii', 'is', 'ih', 'ic', 'sf', 'si', 'ss', 'sh', 'sc', 'hf', 'hi', 'hs', 'hh', 'hc', 'Cf', 'Ci', 'Cs', 'Ch', 'Cc']
[[0, 0], [0, 3], [0, 6], [0, 9], [2, 0], [2, 3], [2, 6], [2, 9], [4, 0], [4, 3], [4, 6], [4, 9], [6, 0], [6, 3], [6, 6], [6, 9], [8, 0], [8, 3], [8, 6], [8, 9]]
[[0, 0], [0, 3], [0, 6], [0, 9], [2, 0], [2, 3], [2, 6], [2, 9], [4, 0], [4, 3], [4, 6], [4, 9], [6, 0], [6, 3], [6, 6], [6, 9], [8, 0], [8, 3], [8, 6], [8, 9]]
>>> 
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-2-24 11:16:01 | 显示全部楼层
打卡~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-2-26 16:10:08 | 显示全部楼层
学到了+
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-13 10:46:54 | 显示全部楼层
打卡
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-4-17 22:11:47 | 显示全部楼层
打卡完结
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-7 09:54:17 | 显示全部楼层
KEEP IT SIMPLE AND STUPID !
要加油啊!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-5-19 21:50:39 | 显示全部楼层
打卡
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-6-13 18:28:25 | 显示全部楼层
谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-7-14 16:11:46 | 显示全部楼层
打卡记录学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-22 09:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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