我怎样才能"translate"这个列表理解中发生了什么?



我正在做一些关于列表理解和*使用的练习。我想我知道这是怎么回事,但我发现很难用具体的语言来表达。你怎么解释b?

我不确定如何理解空字符串的作用或(7-i)在b中的原因。

a = [1, 2, 3, 4, 5, 6, 7, 6, 5, 4, 3, 2, 1]
b = [' ' * 2 * (7 - i) + 'very' * i for i in a]
for line in b:
print(line)

非常感谢!

可以用for循环替换列表推导式:

b=[]
for i in a:
nextline = ' ' * 2 * (7 - i) + 'very' * i
b.append(nextline)

推导式所做的实际上是在开始处添加空白,这取决于i

您可以将this:' ' * 2替换为this:' '(两个空格),并且仍然得到相同的结果。本质上,(7-i)显示了一定数量的空白字符,无论i实际上是什么。

让我们把语句分成几个独立的部分:

b = [' ' * 2 * (7 - i) + 'very' * i for i in a]

循环部分是最后一部分:

for i in a

这只是说我们应该遍历a的值,并为每个条目执行语句的其余部分。

' ' * 2 * (7 - i) + 'very' * i

这是对a中的每个值执行的实际语句。在这两种情况下,这都是一个被乘以的字符串——这意味着它被重复了乘以的次数:

' ' * 2 * (7 - i)

重复单个空格2 * (7 - i)次;这意味着它在字符串前面添加0 (2 * (7 - 7))到12 (2 * (7 - 1))个空格。它们乘以2的原因是因为字符串very是四个字符,所以为了居中,你需要在它前面加length / 2空格。

'very' * i

这意味着very被重复i次,这将是1,2,3等次数。

+将两个字符串合并,得到[0,12]空格,然后very重复n次。

i= 1时:

  • ' ' * 2 * (7 - 1)=>12个空间
  • very * 1=>very
very

如果i是2,空格的数量减少2(7 - 2现在是5),而very会重复一次(veryvery):

veryvery

您的列表推导式从列表a中获取每个元素i(在本例中,它们都是整数),然后将' ' * 2 * (7 - i) + 'very' * i的值作为元素存储在新列表b中。

当字符串与整数i相乘时,该字符串重复i次。因此,在您的示例中,' ' * 2 * (7 - i)意味着空格(不是空字符串!)被重复2 * (7 - i)次。例如,对于第二个元素i = 2,这意味着2 * (7 - 2) = 10空格。

所以第二部分是'very' * i,工作方式相同。例如,第二个元素i = 2,字符串'very'重复两次。

当添加两个字符串时,它们被连接在一起。所以你的第二个元素现在有10个空格和两倍的单词'very'——>' veryvery'.

a中的其他数字做同样的操作,你得到

b = [
'            very',
'          veryvery',
'        veryveryvery',
'      veryveryveryvery',
'    veryveryveryveryvery',
'  veryveryveryveryveryvery',
'veryveryveryveryveryveryvery',
'  veryveryveryveryveryvery',
'    veryveryveryveryvery',
'      veryveryveryvery',
'        veryveryvery',
'          veryvery',
'            very']

基本上是这样一步一步来的:

b = [' ' * 2 * (7 - i) + 'very' * i for i in a]

i在经过a时改变了值:所以它的值是1,然后是2,以此类推

i的值为1为例,构造如下字符串:两个空格" " + " "7-1乘以(所以基本上是12个空格)然后我们连接very1次(i次)

最新更新