在下面的代码中,最后一行是什么意思?
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] for e in elt
首先,您需要将http://放在URL前面,即:
表达式
[e for e in a_list]
是生成值列表的list comprehension。对于Python字符串,
*
运算符用于重复字符串。尝试在解释器中逐个输入命令,然后查看数据:这表明每行数据都是一个包含两个元素的元组。
因此,表达式
e[1] * e[0]
实际上是e[0]
重复e[1]
次的字符串。因此,程序绘制了一个横幅。
也许最好用一个例子来解释:
是
列表理解只是
for
循环的语法糖,它使表达式由一系列语句组成。elt
可以是任意对象,因为您是从pickles加载它的,而且e
也是如此。用法表明它是一个sequence类型,但它可以是实现序列协议的任何类型。[e[1] * e[0] for e in elt]
是一个列表理解,它通过遍历另一个列表来计算列表本身,在本例中是elt
。新列表中的每个元素都是e[1]*e[0]
,其中e
是elt
中的对应元素。相关问题 更多 >
编程相关推荐