将 for 循环转换为带赋值的列表理解?
Convert for loop into list comprehension with assignment?
我正在尝试将带有赋值的 for 循环转换为列表理解。
更准确地说,我试图仅替换具有三个索引的列表中的一个元素。
可以做到吗?
for i in range(len(data)):
data[i][0] = data[i][0].replace('+00:00','Z').replace(' ','T')
最佳
我相信这是可以做到的,但这不是最好的方法。
首先,您将为代码的外部 reader 创建一个大的琼斯复杂度。
其次,您将超过一行中首选的字符数,即 80 个。这将再次为 reader 带来复杂性问题。
第三是列表理解从列表理解到 return 事物,这里你改变你的原始列表。也不是最佳实践。
- 虽然我不建议你在这种情况下使用
list-comprehension
,但如果你真的想使用它,这里有一个例子。
- 它可以处理不同长度的
data
,如果你需要的话。
代码:
data = [["1 +00:00",""],["2 +00:00","",""],["3 +00:00"]]
print([[i[0].replace('+00:00','Z').replace(' ','T'),*i[1:]] for i in data])
结果:
[['1TZ', ''], ['2TZ', '', ''], ['3TZ']]
如果你真的,真的想把它转换成列表理解,你可以尝试这样的事情,假设子列表有三个元素,正如你在问题:
new_data = [[a.replace('+00:00','Z').replace(' ','T'), b, c] for (a, b, c) in data]
请注意,这不会修改现有列表,但会创建一个新列表。但是,在这种情况下,我会坚持使用常规的 for
循环,这样可以更好地传达您实际在做什么。不过,您可以直接迭代元素,而不是迭代索引:
for x in data:
x[0] = x[0].replace('+00:00','Z').replace(' ','T')
列表理解在制作列表时很有用。所以,这里不推荐。但是,您仍然可以尝试这个简单的解决方案 -
print([ele[0].replace('+00:00','Z').replace(' ','T') for ele in data])
我正在尝试将带有赋值的 for 循环转换为列表理解。
更准确地说,我试图仅替换具有三个索引的列表中的一个元素。
可以做到吗?
for i in range(len(data)):
data[i][0] = data[i][0].replace('+00:00','Z').replace(' ','T')
最佳
我相信这是可以做到的,但这不是最好的方法。 首先,您将为代码的外部 reader 创建一个大的琼斯复杂度。 其次,您将超过一行中首选的字符数,即 80 个。这将再次为 reader 带来复杂性问题。 第三是列表理解从列表理解到 return 事物,这里你改变你的原始列表。也不是最佳实践。
- 虽然我不建议你在这种情况下使用
list-comprehension
,但如果你真的想使用它,这里有一个例子。 - 它可以处理不同长度的
data
,如果你需要的话。
代码:
data = [["1 +00:00",""],["2 +00:00","",""],["3 +00:00"]]
print([[i[0].replace('+00:00','Z').replace(' ','T'),*i[1:]] for i in data])
结果:
[['1TZ', ''], ['2TZ', '', ''], ['3TZ']]
如果你真的,真的想把它转换成列表理解,你可以尝试这样的事情,假设子列表有三个元素,正如你在问题:
new_data = [[a.replace('+00:00','Z').replace(' ','T'), b, c] for (a, b, c) in data]
请注意,这不会修改现有列表,但会创建一个新列表。但是,在这种情况下,我会坚持使用常规的 for
循环,这样可以更好地传达您实际在做什么。不过,您可以直接迭代元素,而不是迭代索引:
for x in data:
x[0] = x[0].replace('+00:00','Z').replace(' ','T')
列表理解在制作列表时很有用。所以,这里不推荐。但是,您仍然可以尝试这个简单的解决方案 -
print([ele[0].replace('+00:00','Z').replace(' ','T') for ele in data])