CodeGym /课程 /Python SELF ZH /列表生成

列表生成

Python SELF ZH
第 7 级 , 课程 7
可用

7.1 乘法

在 Python 中有一种方便的语法,你可以用它来增加元素的数量。为此可以使用简单的乘法运算符。

字符串生成

这可以应用于字符串:


print("妈妈" * 5)  # 输出 妈妈妈妈妈妈妈妈妈妈
        

或者,也可以快速输出一个字符串分隔符:


print("-" * 40)  # 输出 ----------------------------------------
        

列表生成

同样的,你也可以增加列表中的元素数量:


print(["apple"] * 5)  # 输出 ['apple', 'apple', 'apple', 'apple', 'apple']
        

这个运算符还有更实际的应用。比如你想创建一个由10个元素组成且全为零的列表:


alist = [0] * 10
print(alist)  # 输出 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] 
        

你甚至可以创建一个二维数组。比如,你想创建一个20x10的数组,填充零。这也很简单:


alist = [[0] * 10] * 20 
print(alist)  # 输出 [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], ...]
        

很方便,对吧?

7.2 列表推导式

在 Python 中有一个很有用的工具,叫做“列表推导式” — — 它是一种方便且紧凑的方式来创建列表。 这个语法工具允许你通过在代码中的一行来对可迭代对象的每个元素应用表达式,从而生成新的列表。

展示比描述更容易。这个语法工具看起来像这样:


[表达式 for 变量 in 序列]

其中:

  • 变量 — 一些变量的标识符,
  • 序列 — 变量所取值的序列(这可以是列表、字符串或通过函数 range 获取的对象),
  • 表达式 — 一些表达式,通常依赖于生成器中使用的变量,用以填充列表的元素。

重要! 整个表达式都应该包含在方括号中。

以下是一些使用生成器的例子:

你可以使用生成器创建一个由 n 个零组成的列表:


alist = [0 for i in range(100)]
        

创建一个由整数平方构成的列表,可以这样:


n = 5
alist = [i ** 2 for i in range(n)]            
        

创建一个由整数 1 到 n 填充的列表:


n = 10
alist = [i + 1 for i in range(n)]
        

用这种方式,你可以获得一个由1到9的随机数填充的列表 (使用 random 模块中的 randrange() 函数):


from random import randrange

n = 10
alist = [randrange(1, 10) for i in range(n)]
        

7.3 在列表推导式中使用循环

列表推导式不仅可以用于生成列表。原则上,它只是一个紧凑的 for 循环书写方式。

比如,你可以用它简单地输出列表中的某些值到屏幕:


alist = ["apple", "banana", "cherry"]
[print(x) for x in alist]
        

或者甚至可以从键盘输入值:


a = [input() for i in range(int(input()))]
        

在这个例子中,列表将由从标准输入读取的字符串组成:首先需要输入列表元素的数量 (这个值将用作函数 range 的参数),然后输入指定数量的字符串。

在你习惯的方式中,这段代码看起来会是这样:


n = int(input())
a = []
for i in range(n):
    x = input()  
    a.append(x)
        

总之,列表推导式的功能相当丰富:

可以使用条件:

在表达式中包含条件允许你过滤元素,例如,你可以创建一个只包含偶数的列表:


[x for x in range(10) if x % 2 == 0]
        

嵌套循环:

生成器允许使用嵌套循环,例如,用于创建多维数组:


[(x, y) for x in range(3) for y in range(3)]
        
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION