【发布时间】:2021-04-23 06:16:35
【问题描述】:
我正在尝试理解和探索如何在列表理解中编写条件:
我想将以下 for 循环转换为列表理解:
dot = ['.hello', 'world']
for i in range(len(dot)):
if dot[i][0] != ".":
dot[i] = "." + dot[i]
我相信我一定是错误地应用了here 描述的格式:
test = ["." + x for x in dot if dot[x][0] != "."]
...并因此收到以下信息:
TypeError: list indices must be integers or slices, not str
我完全理解可读性受到影响 - 我只是在尝试对自己的学习进行列表理解。
【问题讨论】:
-
您忘记在列表理解版本中使用
range,因此您正在迭代字符串的每个字符,而不是索引。这就是为什么您在尝试使用str索引列表时遇到类型错误。 -
您的
for循环作为列表理解 的等效项将是:["." + dot[i] if dot[i][0] != "." else dot[i] for i in range(len(dot))]。然而,更好的版本已经共享为answer by PacketLoss
标签: python list for-loop if-statement list-comprehension