目录
这篇文章适合新手(或者是刚入门的小白),如果觉得用可以点赞收藏。
1.引入知识:
2.分析语法
3.再举几个例子
1)计算字符串的Asic编码值
2)在矩阵上的运算
a.取一行元素
b.取一行元素
c.取主对角线元素
d.取负对角线元素
4.加入if 筛选操作
a.筛选出偶数
b.筛选出首字母为'F'的字符串
5.列表表达式的嵌套结构,同时加上if筛选语句
1)走一个例子,先不加入筛选条件。
2)加入筛选条件。
6.下面来理解一下我在PyTorch中遇到的列表表达式
先上一道小菜,举个例子。
[i+10 for i in range(10)]
[i*10 for i in range(10)]
运行结果为:
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
[0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
[expression for target in iterable]
这是列表表达式最基本的表达式,for的左侧为修饰表达式(expression),for的右侧为目标
(target),因为执行列表表达式的时候是先执行for右侧的语句,然后是执行左侧的语句(我们从
上面的例子可以看出来,i不断的从右侧被取出来,然后在左侧进行“+10、-10”操作)。 iterable 是
一个可迭代对象(可以是元组,列表,字符串)。
y=[ord(c) for c in "Hello World !"]
y
[72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 32, 33]
列表可以用一行代码实现某个功能,可以完美的解释了Python简洁明了的语法特点,但是有时复杂的列表表达式比较难理解,我们可以将其转化为for循环语句去实现与列表表达式相同的功能。
比如上面的我们可以用for语句实现,代码如下:
a="Hello World !"
b=[0,0,0,0,0,0,0,0,0,0,0,0,0]
for i in range(len (a)):
b[i]=ord(a[i])
b
[72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 32, 33]
matrix=[[12,2,3],
[4,5,6],
[7,8,9]]
matrix
[[12, 2, 3], [4, 5, 6], [7, 8, 9]]
matrix[1]
[4,5,6]
col2=[row[1] for row in matrix]#意思是,先从for右边的matrix中取得迭代的一行,然后row[1]取一行中的第二个元素
col2
[2, 5, 8]
diag=[matrix[i][i] for i in range(len(matrix))]
diag
[12,5,9]
matrix[i][i] 完成对矩阵中具体的某个元素进行遍历
diag=[matrix[i][len(matrix)-i-1] for i in range(len(matrix))]
diag
[3,5,7]
[expression for target in iterable if condition]
[i for i in range(10) if i%2==0]
[0, 2, 4, 6, 8]
对比下面这个挑选出奇数的算法,然后你也可以发现,这个列表表达式先是计算for右边的,然后是for左边的。
[i+1 for i in range(10) if i%2==0]
[1, 3, 5, 7, 9]
words=["Great!","Fantistic","Brilliant","Fanuny"]
fwords=[w for w in words if w[0]=="F"]
fwords
['Fantistic', 'Fanuny']
[expression for target1 in iterable1 (if condition1)
for target2 in iterable2 (if cndition2)
........
for targetN in iterableN (if conditionN)
[x+y for x in "Iu" for y in "Hello"]
['IH', 'Ie', 'Il', 'Il', 'Io', 'uH', 'ue', 'ul', 'ul', 'uo']
[[x,y] for x in range(5) if x%2==0 for y in range(5) if y%2==1]
[[0, 1], [0, 3], [2, 1], [2, 3], [4, 1], [4, 3]]
有点想笛卡尔笛的运算
[str(int(year)) + '-' + str(int(month)) + '-' + str(int(day)) for year, month, day in zip(years, months, days)]
[str(int(year)) + '-' + str(int(month)) + '-' + str(int(day)) for year, month, day in zip(years, months, days)]
这一行代码比较长,我们可以从右边开始理解:years,month,days分别是一个迭代器,然后zip()函数作用将 years,month,days三个迭代器中的元素进行组合,然后生成一个迭代器,可以通过以下代码来查看:理解上面的,就不用看下面代码了。
然后,year,month,day分别接受zip()函数打包玩的数据,最后放在for的左边进行转化。
years
>>
0 2016
1 2016
2 2016
3 2016
4 2016
5 2016
6 2016
7 2016
Name: year, dtype: int64
months
0 1
1 1
2 1
3 1
4 1
5 1
6 1
7 1
Name: month, dtype: int64
days
0 1
1 2
2 3
3 4
4 5
5 6
6 7
7 8
Name: day, dtype: int64
list(zip(years, months, days))
[(2016, 1, 1),
(2016, 1, 2),
(2016, 1, 3),
(2016, 1, 4),
(2016, 1, 5),
(2016, 1, 6),
(2016, 1, 7),
(2016, 1, 8)]
注意的一点:
有的小伙伴可能觉得这一段代码与上面的一条代码等效,但是并不是这样的,我们可以看看运行结果(这种是各个元素的随机组合,有多少中会结合多少种8*8*8种):
[str(int(year)) + '-' + str(int(month)) + '-' + str(int(day)) for year in years for month in months for day in days]
运行结果如下(有些长):
['2016-1-1',
'2016-1-2',
'2016-1-3',
'2016-1-4',
'2016-1-5',
'2016-1-6',
'2016-1-7',
'2016-1-8',
'2016-1-1',
'2016-1-2',
'2016-1-3',
'2016-1-4',
'2016-1-5',
'2016-1-6',
'2016-1-7',
'2016-1-8',
'2016-1-1',
'2016-1-2',
'2016-1-3',
'2016-1-4',
'2016-1-5',
'2016-1-6',
'2016-1-7',
'2016-1-8',
'2016-1-1',
'2016-1-2',
'2016-1-3',
'2016-1-4',
'2016-1-5',
'2016-1-6',
'2016-1-7',
'2016-1-8',
'2016-1-1',
'2016-1-2',
'2016-1-3',
'2016-1-4',
'2016-1-5',
'2016-1-6',
'2016-1-7',
'2016-1-8',
'2016-1-1',
'2016-1-2',
'2016-1-3',
'2016-1-4',
'2016-1-5',
'2016-1-6',
'2016-1-7',
'2016-1-8',
'2016-1-1',
'2016-1-2',
'2016-1-3',
'2016-1-4',
'2016-1-5',
'2016-1-6',
'2016-1-7',
'2016-1-8',
'2016-1-1',
'2016-1-2',
'2016-1-3',
'2016-1-4',
'2016-1-5',
'2016-1-6',
'2016-1-7',
'2016-1-8',
'2016-1-1',
'2016-1-2',
'2016-1-3',
'2016-1-4',
'2016-1-5',
'2016-1-6',
'2016-1-7',
'2016-1-8',
'2016-1-1',
'2016-1-2',
'2016-1-3',
'2016-1-4',
'2016-1-5',
'2016-1-6',
'2016-1-7',
'2016-1-8',
'2016-1-1',
'2016-1-2',
'2016-1-3',
'2016-1-4',
'2016-1-5',
'2016-1-6',
'2016-1-7',
'2016-1-8',
'2016-1-1',
'2016-1-2',
'2016-1-3',
'2016-1-4',
'2016-1-5',
'2016-1-6',
'2016-1-7',
'2016-1-8',
'2016-1-1',
'2016-1-2',
'2016-1-3',
'2016-1-4',
'2016-1-5',
'2016-1-6',
'2016-1-7',
'2016-1-8',
'2016-1-1',
'2016-1-2',
'2016-1-3',
'2016-1-4',
'2016-1-5',
'2016-1-6',
'2016-1-7',
'2016-1-8',
'2016-1-1',
'2016-1-2',
'2016-1-3',
'2016-1-4',
'2016-1-5',
'2016-1-6',
'2016-1-7',
'2016-1-8',
'2016-1-1',
'2016-1-2',
'2016-1-3',
'2016-1-4',
'2016-1-5',
'2016-1-6',
'2016-1-7',
'2016-1-8',
'2016-1-1',
'2016-1-2',
'2016-1-3',
'2016-1-4',
'2016-1-5',
'2016-1-6',
'2016-1-7',
'2016-1-8',
'2016-1-1',
'2016-1-2',
'2016-1-3',
'2016-1-4',
'2016-1-5',
'2016-1-6',
'2016-1-7',
'2016-1-8',
'2016-1-1',
'2016-1-2',
'2016-1-3',
'2016-1-4',
'2016-1-5',
'2016-1-6',
'2016-1-7',
'2016-1-8',
'2016-1-1',
'2016-1-2',
'2016-1-3',
'2016-1-4',
'2016-1-5',
'2016-1-6',
'2016-1-7',
'2016-1-8',
'2016-1-1',
'2016-1-2',
'2016-1-3',
'2016-1-4',
'2016-1-5',
'2016-1-6',
'2016-1-7',
'2016-1-8',
'2016-1-1',
'2016-1-2',
'2016-1-3',
'2016-1-4',
'2016-1-5',
'2016-1-6',
'2016-1-7',
'2016-1-8',
'2016-1-1',
'2016-1-2',
'2016-1-3',
'2016-1-4',
'2016-1-5',
'2016-1-6',
'2016-1-7',
'2016-1-8',
'2016-1-1',
'2016-1-2',
'2016-1-3',
'2016-1-4',
'2016-1-5',
'2016-1-6',
'2016-1-7',
'2016-1-8',
'2016-1-1',
'2016-1-2',
'2016-1-3',
'2016-1-4',
'2016-1-5',
'2016-1-6',
'2016-1-7',
'2016-1-8',
'2016-1-1',
'2016-1-2',
'2016-1-3',
'2016-1-4',
'2016-1-5',
'2016-1-6',
'2016-1-7',
'2016-1-8',
'2016-1-1',
'2016-1-2',
'2016-1-3',
'2016-1-4',
'2016-1-5',
'2016-1-6',
'2016-1-7',
'2016-1-8',
'2016-1-1',
'2016-1-2',
'2016-1-3',
'2016-1-4',
'2016-1-5',
'2016-1-6',
'2016-1-7',
'2016-1-8',
'2016-1-1',
'2016-1-2',
'2016-1-3',
'2016-1-4',
'2016-1-5',
'2016-1-6',
'2016-1-7',
'2016-1-8',
'2016-1-1',
'2016-1-2',
'2016-1-3',
'2016-1-4',
'2016-1-5',
'2016-1-6',
'2016-1-7',
'2016-1-8',
'2016-1-1',
'2016-1-2',
'2016-1-3',
'2016-1-4',
'2016-1-5',
'2016-1-6',
'2016-1-7',
'2016-1-8',
'2016-1-1',
'2016-1-2',
'2016-1-3',
'2016-1-4',
'2016-1-5',
'2016-1-6',
'2016-1-7',
'2016-1-8',
'2016-1-1',
'2016-1-2',
'2016-1-3',
'2016-1-4',
'2016-1-5',
'2016-1-6',
'2016-1-7',
'2016-1-8',
'2016-1-1',
'2016-1-2',
'2016-1-3',
'2016-1-4',
'2016-1-5',
'2016-1-6',
'2016-1-7',
'2016-1-8',
'2016-1-1',
'2016-1-2',
'2016-1-3',
'2016-1-4',
'2016-1-5',
'2016-1-6',
'2016-1-7',
'2016-1-8',
'2016-1-1',
'2016-1-2',
'2016-1-3',
'2016-1-4',
'2016-1-5',
'2016-1-6',
'2016-1-7',
'2016-1-8',
'2016-1-1',
'2016-1-2',
'2016-1-3',
'2016-1-4',
'2016-1-5',
'2016-1-6',
'2016-1-7',
'2016-1-8',
'2016-1-1',
'2016-1-2',
'2016-1-3',
'2016-1-4',
'2016-1-5',
'2016-1-6',
'2016-1-7',
'2016-1-8',
'2016-1-1',
'2016-1-2',
'2016-1-3',
'2016-1-4',
'2016-1-5',
'2016-1-6',
'2016-1-7',
'2016-1-8',
'2016-1-1',
'2016-1-2',
'2016-1-3',
'2016-1-4',
'2016-1-5',
'2016-1-6',
'2016-1-7',
'2016-1-8',
'2016-1-1',
'2016-1-2',
'2016-1-3',
'2016-1-4',
'2016-1-5',
'2016-1-6',
'2016-1-7',
'2016-1-8',
'2016-1-1',
'2016-1-2',
'2016-1-3',
'2016-1-4',
'2016-1-5',
'2016-1-6',
'2016-1-7',
'2016-1-8',
'2016-1-1',
'2016-1-2',
'2016-1-3',
'2016-1-4',
'2016-1-5',
'2016-1-6',
'2016-1-7',
'2016-1-8',
'2016-1-1',
'2016-1-2',
'2016-1-3',
'2016-1-4',
'2016-1-5',
'2016-1-6',
'2016-1-7',
'2016-1-8',
'2016-1-1',
'2016-1-2',
'2016-1-3',
'2016-1-4',
'2016-1-5',
'2016-1-6',
'2016-1-7',
'2016-1-8',
'2016-1-1',
'2016-1-2',
'2016-1-3',
'2016-1-4',
'2016-1-5',
'2016-1-6',
'2016-1-7',
'2016-1-8',
'2016-1-1',
'2016-1-2',
'2016-1-3',
'2016-1-4',
'2016-1-5',
'2016-1-6',
'2016-1-7',
'2016-1-8',
'2016-1-1',
'2016-1-2',
'2016-1-3',
'2016-1-4',
'2016-1-5',
'2016-1-6',
'2016-1-7',
'2016-1-8',
'2016-1-1',
'2016-1-2',
'2016-1-3',
'2016-1-4',
'2016-1-5',
'2016-1-6',
'2016-1-7',
'2016-1-8',
'2016-1-1',
'2016-1-2',
'2016-1-3',
'2016-1-4',
'2016-1-5',
'2016-1-6',
'2016-1-7',
'2016-1-8',
'2016-1-1',
'2016-1-2',
'2016-1-3',
'2016-1-4',
'2016-1-5',
'2016-1-6',
'2016-1-7',
'2016-1-8',
'2016-1-1',
'2016-1-2',
'2016-1-3',
'2016-1-4',
'2016-1-5',
'2016-1-6',
'2016-1-7',
'2016-1-8',
'2016-1-1',
'2016-1-2',
'2016-1-3',
'2016-1-4',
'2016-1-5',
'2016-1-6',
'2016-1-7',
'2016-1-8',
'2016-1-1',
'2016-1-2',
'2016-1-3',
'2016-1-4',
'2016-1-5',
'2016-1-6',
'2016-1-7',
'2016-1-8',
'2016-1-1',
'2016-1-2',
'2016-1-3',
'2016-1-4',
'2016-1-5',
'2016-1-6',
'2016-1-7',
'2016-1-8',
'2016-1-1',
'2016-1-2',
'2016-1-3',
'2016-1-4',
'2016-1-5',
'2016-1-6',
'2016-1-7',
'2016-1-8',
'2016-1-1',
'2016-1-2',
'2016-1-3',
'2016-1-4',
'2016-1-5',
'2016-1-6',
'2016-1-7',
'2016-1-8',
'2016-1-1',
'2016-1-2',
'2016-1-3',
'2016-1-4',
'2016-1-5',
'2016-1-6',
'2016-1-7',
'2016-1-8',
'2016-1-1',
'2016-1-2',
'2016-1-3',
'2016-1-4',
'2016-1-5',
'2016-1-6',
'2016-1-7',
'2016-1-8',
'2016-1-1',
'2016-1-2',
'2016-1-3',
'2016-1-4',
'2016-1-5',
'2016-1-6',
'2016-1-7',
'2016-1-8',
'2016-1-1',
'2016-1-2',
'2016-1-3',
'2016-1-4',
'2016-1-5',
'2016-1-6',
'2016-1-7',
'2016-1-8',
'2016-1-1',
'2016-1-2',
'2016-1-3',
'2016-1-4',
'2016-1-5',
'2016-1-6',
'2016-1-7',
'2016-1-8',
'2016-1-1',
'2016-1-2',
'2016-1-3',
'2016-1-4',
'2016-1-5',
'2016-1-6',
'2016-1-7',
'2016-1-8',
'2016-1-1',
'2016-1-2',
'2016-1-3',
'2016-1-4',
'2016-1-5',
'2016-1-6',
'2016-1-7',
'2016-1-8']
哈哈,实验出真理,谢谢你的查看,如果你能提出宝贵的意见我将感激不激。