元组的特殊语法
如果圆括号里的单一对象是元组对象而不是一个简单的表达式,需要对python进行特别说明。如果确实想得到一个元组,只要在这一单个元素之后、关闭圆括号之前加一个逗号就可以了。
1 | >>> x=(40) |
转换、方法以及不可变性
元组不提供排序方法,如果想对元组进行排序,通常得先将它转换为列表并使其成为一个可变对象,才能获得使用排序方法调用的权限。或者使用新的sorted的内置方法。
1 | >>> T=('cc','aa','dd','bb') |
列表解析
什么是列表解析?
简单来说,列表解析(list comprehension)提供了一种优雅的生成列表的方法,能用一行代码代替十几行代码,而且不损失任何可读性。而且,性能还快很多很多
简单给个例子,如果我们需要0~100所有偶数组成的列表,正常的代码应该是这样的:
1 | a=[] |
用列表解析来做就是这样的:
1 | a=[x for x in range(101) if x%2==0] |
简单的一行代码代替了4行代码
从上面的例子来看列表解析的语法其实不难,可以分成三个部分来看
- x:我们需要的列表里面的结果(1st part)
- for x in range(101):x来源——0~100的数字(2nd part)
- if x%2==0:x成立的条件,如果不成立就不放在列表里了(3rd part)
获取文本中所有单词的第1个字符
1 | text="My house is full of flowers" |
列表解析的代码:
1 | first_charts=[word[0] for word in text.split()] |
获取两个列表对应位的乘积
来个复杂的,list a=[2,3,4,5]; list b=[3,4,5,6],想要得到a,b对应位的乘积:
1 | [i*j for i,j in zip(a,b)] |
带if else的列表解析
list a=[‘1’,’2’,’3’,’i’,’8’],现在想将a中所有能转化为数字的字符串转化为数字,不为数字的内容都转换成0,用列表解析可以这样写:
1 | [int(i) if i.isdigit() else 0 for i in a] |
增加一点难度,如果list a=[‘1’,’2’,’3’,4,5,’o’,’6’],如果不能转换成数字则为None,列表解析可以这样写:
1 | [int(i) if str(i).isdigit() else None for i in a] |
获取一个全0列表1
['ok' for i in range(10)]
略复杂的列表解析,获取列表中嵌套列表的元素,生成一个无嵌套的新列表
这个例子说起来挺拗口,实际上是想从[[1,2],[3,4,5],[6,7],[8]]这种列表中,把嵌套在列表中的元素解出来,得到[1,2,3,4,5,6,7,8],用列表解析可以这样写:
1 | a=[[1,2],[3,4,5],[6,7],[8]] |
理解起来略有一点麻烦,for i in a,i为子列表,for x in i,x得到每个子列表中的值。这样的列表解析写法确实很难理解,所以有时候我们不要过分的使用复杂的列表解析。
获取所有可能的组合
1 | from itertools import product |