- 列表推导式,也叫列表解析式,可以使用非常简洁的方式来快速生成满足特定需求的列表,属于非原地操作。
- [表达式 for 变量 in 序列或可迭代对象if条件表达式]
- 如下示例,得到‘hello’每个字符的ASCII码值,并存放到列表中
---以前使用for循环的方法:
>>> a = []
>>> for i in 'hello':
... a.append(ord(i))
>>> a
[104, 101, 108, 108, 111]
---列表推导式方法:
>>> [ord(i) for i in 'hello'] # i来自for i in 'hello'的循环,ord处理每次循环的结果
[104, 101, 108, 108, 111]
---若把结果在转换成字符:
>>> a = [ord(i) for i in 'hello'] #非原地操作,把上一步得到的结果赋值给a
>>> [chr(i) for i in a] #a得到A
['h', 'e', 'l', 'l', 'o']
---若把上一步的结果输出为字符串:
>>> ''.join([chr(i) for i in a]) #join方法把列表转换成字符串
'hello'
如果列表中很多元素首尾存在空格,可以使用列表推导式配合 strip() 方法快速去除这些空格。
代码语言:javascript复制>>> a = [' hello ',' python','nihao ']
>>> a
[' hello ', ' python', 'nihao ']
>>> [i.strip() for i in a]
['hello', 'python', 'nihao']
如把数值型转换成文本型,可以使用列表推导式配合 str() 方法快速进行转换。
代码语言:javascript复制>>> [ i for i in range(10)]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> [str(i) for i in range(10)]
['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
练习:
代码语言:javascript复制阿凡提和国王下棋,阿凡提赢了,他让国王赏给他一些米。棋盘一共有64个格子,第一个格子放1粒米,第二个格子放2粒米,第3个格子放4粒米,也就是2的n-1次方。那么阿凡提最后一共能得到多少米? 第64格也就是2的63次方
>>> [2**i for i in range(64)] #每个格子的数量如下
[1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072, 262144, 524288, 1048576, 2097152, 4194304, 8388608, 16777216, 33554432, 67108864, 134217728, 268435456, 536870912, 1073741824, 2147483648, 4294967296, 8589934592, 17179869184, 34359738368, 68719476736, 137438953472, 274877906944, 549755813888, 1099511627776, 2199023255552, 4398046511104, 8796093022208, 17592186044416, 35184372088832, 70368744177664, 140737488355328, 281474976710656, 562949953421312, 1125899906842624, 2251799813685248, 4503599627370496, 9007199254740992, 18014398509481984, 36028797018963968, 72057594037927936, 144115188075855872, 288230376151711744, 576460752303423488, 1152921504606846976, 2305843009213693952, 4611686018427387904, 9223372036854775808]
>>> sum([2**i for i in range(64)]) #使用sum函数把值相加即为最后的结果
18446744073709551615