python小技巧:列表解析

列表解析是用紧凑的方式来构造列表,起源于数学集合符号。一旦使用列表解析后,会经常使用它们来创建可读性强、紧凑的代码,而且这些语句执行速度也较快,效率较高。

列表解析至少需要包含两个部分,但一般包含三个部分:【expression for-clause condition】

比如:要得到0~20的偶数列表,先用range来生成0~20的数字,然后检查是否为偶数(i%2==0),最后将每个满足条件的元素手机到列表中。

1 >>> [i for i in range(21) if i%2 == 0]
2 [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]

当然,并不仅限于数字,比如,找到单词中所包含的元音列表

1 >>> word = "solidarity"
2 >>> vowels = "aeiou"
3 >>> [i for i in word if i in vowels]
4 ['o', 'i', 'a', 'i']

还可以从多个序列中,采用复杂条件来得到列表。例如,假设要生成数字对(笛卡尔坐标对),x在0~3,y在0~4,且x>y。通过限制x为偶数可以进一步限制数字对。

1 >>> [(x,y) for x in range(3) for y in range(4) if x > y]
2 [(1, 0), (2, 0), (2, 1)]
3 >>> [(x,y) for x in range(3) for y in range(4) if x > y and x%2 == 0]
4 [(2, 0), (2, 1)]

列表解析还能用于转换,比如,对于包含字母和数字的字符串,希望得到只有数字的列表,需要过滤掉所有非数字的字符,并将字符数字转换为整数。

1 >>> string="John Doe,874 Main St.,East Lansing,MI,48823"
2 >>> [int(c) for c in string if c.isdigit()]
3 [8, 7, 4, 4, 8, 8, 2, 3]

列表解析的完整规则是表达式后跟for语句,然后跟多个if 或者for从句或者无。

posted @ 2018-08-30 16:21  一天一点进步  阅读(1330)  评论(0编辑  收藏  举报