修改p中嵌套列表元素的最优雅方法

2024-04-26 07:20:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个二维列表,如下所示:

table = [['donkey', '2', '1', '0'], ['goat', '5', '3', '2']]

我想把最后三个元素改成整数,但下面的代码感觉很难看:

for row in table:
    for i in range(len(row)-1):
        row[i+1] = int(row[i+1])

但我更喜欢这样的东西:

for row in table:
    for col in row[1:]:
        col = int(col)

我认为应该有一种方法来编写上面的代码,但是切片创建了一个独立于原始列表的迭代器/新列表,因此引用不会继续。

有什么办法可以得到一个更像Python的解决方案吗?


Tags: 代码in元素列表forlentablerange
3条回答
for row in table:
    row[1:] = [int(c) for c in row[1:]]

上面看起来更像Python吗?

我很喜欢谢哈的回答。

一般来说,在编写Python代码时,如果您发现自己在编写f or i in range(len(somelist)),那么您就错了:

  • 如果只有一个列表,请尝试enumerate
  • 如果有两个或多个要并行迭代的列表,请尝试zipitertools.izip

在您的情况下,第一列不同,因此您不能优雅地使用枚举:

for row in table:
    for i, val in enumerate(row):
        if i == 0: continue
        row[i] = int(val)

尝试:

>>> for row in table:
...     row[1:]=map(int,row[1:])
... 
>>> table
[['donkey', 2, 1, 0], ['goat', 5, 3, 2]]

AFAIK,分配给一个list片会强制操作就地完成,而不是创建一个新的list

相关问题 更多 >