Con*_*ean 28 python nested-lists
我有一个2D列表,如下所示:
table = [['donkey', '2', '1', '0'], ['goat', '5', '3', '2']]
Run Code Online (Sandbox Code Playgroud)
我想将最后三个元素更改为整数,但下面的代码感觉非常难看:
for row in table:
for i in range(len(row)-1):
row[i+1] = int(row[i+1])
Run Code Online (Sandbox Code Playgroud)
但我宁愿有一些看起来像:
for row in table:
for col in row[1:]:
col = int(col)
Run Code Online (Sandbox Code Playgroud)
我认为应该有一种方法来编写上面的代码,但是切片创建了一个与原始代码分开的迭代器/新列表,因此引用不会延续.
有没有办法获得更多的Pythonic解决方案?
She*_*har 20
for row in table:
row[1:] = [int(c) for c in row[1:]]
Run Code Online (Sandbox Code Playgroud)
上面看起来更pythonic?
MAK*_*MAK 13
尝试:
>>> for row in table:
... row[1:]=map(int,row[1:])
...
>>> table
[['donkey', 2, 1, 0], ['goat', 5, 3, 2]]
Run Code Online (Sandbox Code Playgroud)
AFAIK,分配给list切片会强制执行操作而不是创建新操作list.
我喜欢Shekhar回答很多.
作为一般规则,在编写Python代码时,如果发现自己编写了f or i in range(len(somelist)),那么你做错了:
enumerate如果您有一个列表,请尝试zip或者itertools.izip如果您有2个或更多列表要并行迭代在您的情况下,第一列是不同的,因此您不能优雅地使用枚举:
for row in table:
for i, val in enumerate(row):
if i == 0: continue
row[i] = int(val)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
36860 次 |
| 最近记录: |