所以我已经完成了一个我正在研究的项目,但是我正试图找到一种方法,使它更具有pythonic,从某种意义上说,它可以减少线条,看起来更干净。我之前被告知如果它没有被破坏它不应该修复但总是寻找一种更好的方法来改进我的编程。
所以我有一个带有这些值的元组:
n = ((100,200), (300,400),(500,600))
for i, x in enumerate(n):
if i is 0: D = x[0]
if i is 1: M = x[0]
if i is 2: s = x[0]
print D, M, s
其中(D,M,s)应打印出来:
100,300,500
有没有办法编写那些if语句,因为它们在每次循环元组时都会成为第一个值?
答案 0 :(得分:2)
您可以利用解包来实现此目的以及列表理解:
D, M, s = [x[0] for x in n]
这有效地循环遍历第一个项目的元组列表,并生成一个现在看起来像的列表:[100, 300, 500]
然后将其解压缩到:D, M, s
请注意,代码非常简单,易于阅读,并且不需要任何其他构造来使其工作。
答案 1 :(得分:1)
您可以按如下方式使用列表推导:
n = ((100,200), (300,400), (500,600))
print ', '.join([str(v1) for v1, v2 in n])
这会显示:
100, 300, 500
当n
的长度不同时,它也会起作用。
答案 2 :(得分:0)
n=((100,200),(300,400),(500,600))
D,M,s=n[0][0],n[1][0],n[2][0]
print(D,M,s,sep=" ,")
答案 3 :(得分:0)
像这样:
D, M, s = zip(*n)[0]