Python中带有并发循环的列表推导式

5

我想把以下代码转换成列表推导式,只是想写更符合Python风格的代码。

index_row = 0
for row in stake_year.iterrows():
    self.assertTrue(row[0] == counts[index_row][0])
    self.assertTrue(row[1][0] == counts[index_row][1])
    index_row += 1

我不明白的是如何遍历计数列表。我不想使用嵌套的for循环,例如:

[self.assertTrue(x[0] == counts[y][0] for x in stake_year for y in counts]

我现在的代码可以工作,但我想更好地理解Python,并按照正确的使用方法使用这种语言。


2
看起来你想使用 enumerate() - gtlambert
1
列表推导式是用于创建列表的,而不是用于执行循环。 - zondo
1
枚举是我想要的。 我不应该把它称为列表推导,但这也是学习的一部分。 感谢大家。 - cryptoref
1
不要忘记接受@minitoto的答案。 :) - Tim Pietzcker
我假设.assertTrue返回None,所以你不想要的列表推导式会创建一个充满None的列表,你会立即丢弃它。这样做极其不符合Python风格,在正常代码中没有任何用处...但是人们有时会在代码高尔夫和其他奇怪的编码游戏中这样做。 :) - PM 2Ring
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - cryptoref
2个回答

7
在你的情况下,更符合Pythonic方式的做法是使用enumerate函数:
for index_row, row in enumerate(stake_year.iterrows()):
    self.assertTrue(row[0] == counts[index_row][0])
    self.assertTrue(row[1][0] == counts[index_row][1])

这很完美,现在enumerate有意义了。谢谢@minitoto。 - cryptoref

5

不要这样做。

列表推导式并不一定比简单的循环更符合Python风格——只有当这些循环被设计用于构建新的列表(或字典、集合等),且列表推导式比循环更易读时才是如此。

在你的例子中并非如此(你没有构建任何东西),你不应该仅仅为了其副作用而使用列表推导式,这是明显违反Python风格的。

所以最好进行转换。

result = []
for line in lines:
    result.append(line.upper())

转换为

result = [line.upper() for line in lines]

但不是你的例子。

谢谢你的评论,Tim。我是一个老恐龙,正在享受学习Python的乐趣,这个旅程真的很有趣。我一直试图用汇编语言编写代码,但在Python中并不总是最好的方式 :) - cryptoref

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接