列表生成推导式的格式(for循环):
list=[Expression for var in range]
其中:list-生成列表名称;
Expression-表达式,用于计算新列表的元素;
var-循环变量;
range-采用range()函数生成的range对象;
例如:
list=[2*i for i in range(10)]
print(list)
# 输出:[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
在李沐:动手学深度学习8.3节:语言模型及数据集中需要把所有文本生成一个语料库列表。这里tokens是一个list of list,因此对于
corpus = [token for line in tokens for token in line]
来说,第一层循环是for line in tokens,表示tokens里面的行元素(如['the', 'time', 'machine', 'by', 'h', 'g', 'wells'])。第二层循环是for token in line,表示行元素里面的词元。完整代码如下:
import random
import matplotlib.pyplot as plt
import torch
from d2l import torch as d2l
tokens = d2l.tokenize(d2l.read_time_machine())
# 因为每个文本行不一定是一个句子或一个段落,因此我们把所有文本行拼接到一起
tokens = tokens[:10]
print(tokens) # tokens是一个list of list
a=[line for line in tokens] # 输出文本行,第一层循环
print(a)
corpus = [token for line in tokens for token in line] # 输出语料库
print(corpus)
输出:
[['the', 'time', 'machine', 'by', 'h', 'g', 'wells'], [], [], [], [], ['i'], [], [], ['the', 'time', 'traveller', 'for', 'so', 'it', 'will', 'be', 'convenient', 'to', 'speak', 'of', 'him'], ['was', 'expounding', 'a', 'recondite', 'matter', 'to', 'us', 'his', 'grey', 'eyes', 'shone', 'and']]
[['the', 'time', 'machine', 'by', 'h', 'g', 'wells'], [], [], [], [], ['i'], [], [], ['the', 'time', 'traveller', 'for', 'so', 'it', 'will', 'be', 'convenient', 'to', 'speak', 'of', 'him'], ['was', 'expounding', 'a', 'recondite', 'matter', 'to', 'us', 'his', 'grey', 'eyes', 'shone', 'and']]
['the', 'time', 'machine', 'by', 'h', 'g', 'wells', 'i', 'the', 'time', 'traveller', 'for', 'so', 'it', 'will', 'be', 'convenient', 'to', 'speak', 'of', 'him', 'was', 'expounding', 'a', 'recondite', 'matter', 'to', 'us', 'his', 'grey', 'eyes', 'shone', 'and']