Python列表理解 - 使用For循环加入

时间:2016-04-13 09:09:21

标签: python python-3.x for-loop list-comprehension

我正在尝试按以下方式生成网址:

http://ergast.com/api/f1/2000/qualifying?limit=10000

我使用Python生成2000年到2015年的URL,为此,编写了这段代码片段:

url = "http://ergast.com/api/f1/"
year = url.join([str(i) + "/qualifying?limit=10000" + "\n" for i in range(1999, 2016)])
print(year)

输出结果为:

1999/qualifying?limit=10000
http://ergast.com/api/f1/2000/qualifying?limit=10000
http://ergast.com/api/f1/2001/qualifying?limit=10000
http://ergast.com/api/f1/2002/qualifying?limit=10000
http://ergast.com/api/f1/2003/qualifying?limit=10000
http://ergast.com/api/f1/2004/qualifying?limit=10000
......
http://ergast.com/api/f1/2012/qualifying?limit=10000
http://ergast.com/api/f1/2013/qualifying?limit=10000
http://ergast.com/api/f1/2014/qualifying?limit=10000
http://ergast.com/api/f1/2015/qualifying?limit=10000

如何摆脱第一线?我尝试制作范围(2000年,2016年),但同样的事情发生在第一行是2000而不是1999年。我做错了什么?我该如何解决这个问题?

4 个答案:

答案 0 :(得分:6)

您可以使用字符串格式:

 if let imageString = arrDict[indexPath.row] .valueForKey("image") as? String {
        //Now you have a String
        // Now make a UIImage from URL and insert it.
    }

<强>更新

根据OP的评论在url = 'http://ergast.com/api/f1/{0}/qualifying?limit=10000' print('\n'.join(url.format(year) for year in range(2000, 2016))) # http://ergast.com/api/f1/2000/qualifying?limit=10000 # http://ergast.com/api/f1/2001/qualifying?limit=10000 # ... # http://ergast.com/api/f1/2015/qualifying?limit=10000 中传递这些网址:

requests.get

答案 1 :(得分:4)

使用列表推导来创建不同的URL,而不是使用URL来加入字符串。

~/.android/debug.keystore

然后你仍然可以使用>>> ["http://ergast.com/api/f1/%d/qualifying?limit=10000" % i for i in range(1999, 2016)] ['http://ergast.com/api/f1/1999/qualifying?limit=10000', 'http://ergast.com/api/f1/2000/qualifying?limit=10000', ... 'http://ergast.com/api/f1/2014/qualifying?limit=10000', 'http://ergast.com/api/f1/2015/qualifying?limit=10000'] 将所有这些连接到一个大字符串,你喜欢。

答案 2 :(得分:1)

很好理解为什么会这样。 为此,您需要了解连接函数,请查看docs

  

将单词列表或元组连接起来   九月

这意味着您的url参数将在您要连接的单词之间重复,这将导致上面的输出,第一个元素没有url。 你想要的不是使用join,就是连接你正在使用年份的字符串。

为此你可以使用不同的方法,如已经回答的那样。 您可以使用@AKS指出的字符串格式,它应该可以工作。

答案 3 :(得分:1)

您可以使用更清晰,更强大的字符串格式,如下所示

fmt = "http://ergast.com/api/f1/{y}/qualifying?limit=10000"
urls = [fmt.format(y=y) for y in range(2000, 1016)]

在你的代码中,使用str.join是有问题的,因为它的语义与你想要完成的语义不同。 s.join(ls),按list ls加入str s的项目。如果ls = [l1, l2 ,...],则返回str(l1) + s + str(l2) + s..