理解Python列表理解中的问题

2024-04-23 06:22:37 发布

您现在位置:Python中文网/ 问答频道 /正文

在下面的代码中,最后一行是什么意思?

import pickle, urllib                                                                                                                                                     

  handle = urllib.urlopen("http://www.pythonchallenge.com/pc/def/banner.p")
  data = pickle.load(handle)
  handle.close()

  for elt in data:
         print "".join([e[1] * e[0] for e in elt])

我对这个问题的尝试:

  • “”加入。。。使用连接方法清空文本
  • e[1]*e[0]乘以序列中的两个后续值,e
  • 我不知道e是什么
  • 我不确定,这意味着什么,当你在for-loop之前有一些东西,比如:e[1] * e[0] for e in elt

Tags: 代码inimportcomhttpfordatawww
3条回答

首先,您需要将http://放在URL前面,即:

handle = urllib.urlopen("http://www.pythonchallenge.com/pc/def/banner.p")

表达式[e for e in a_list]是生成值列表的list comprehension

对于Python字符串,*运算符用于重复字符串。尝试在解释器中逐个输入命令,然后查看数据:

>>> data[0]
[(' ', 95)]

这表明每行数据都是一个包含两个元素的元组。

因此,表达式e[1] * e[0]实际上是e[0]重复e[1]次的字符串。

因此,程序绘制了一个横幅。

也许最好用一个例子来解释:

print "".join([e[1] * e[0] for e in elt])

x = []
for e in elt:
  x.append(e[1] * e[0])
print "".join(x)

列表理解只是for循环的语法糖,它使表达式由一系列语句组成。

elt可以是任意对象,因为您是从pickles加载它的,而且e也是如此。用法表明它是一个sequence类型,但它可以是实现序列协议的任何类型。

[e[1] * e[0] for e in elt]是一个列表理解,它通过遍历另一个列表来计算列表本身,在本例中是elt。新列表中的每个元素都是e[1]*e[0],其中eelt中的对应元素。

相关问题 更多 >