将包含单个字符串的列表列表展平为整数列表

ger*_*jke 10 python

我有一个包含字符串列表的列表看起来像

allyears
#[['1916'], ['1919'], ['1922'], ['1912'], ['1924'], ['1920']]
Run Code Online (Sandbox Code Playgroud)

我需要有这样的输出:

#[1916, 1919, 1922, 1912, 1924, 1920]
Run Code Online (Sandbox Code Playgroud)

一直在尝试这个:

for i in range(0, len(allyears)): 
    allyears[i] = int(allyears[i]) 
Run Code Online (Sandbox Code Playgroud)

但我有错误

>>> TypeError: int() argument must be a string, a bytes-like object or a number, not 'list'
Run Code Online (Sandbox Code Playgroud)

Bin*_*inh 9

你可以简单地这样做:

allyears = [int(i[0]) for i in allyears]
Run Code Online (Sandbox Code Playgroud)

因为你的所有元素allyears都是一个只有一个元素的列表,所以我得到了i[0]

错误是因为 ypu 无法将 a 转换listint


dsp*_*cer 6

您非常接近,您只需要allyears[i]在进行int转换之前获取第一个(也是唯一一个)元素:

for i in range(0, len(allyears)): 
    allyears[i] = int(allyears[i][0]) 
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用列表理解在一行中完成此操作:

allyears = [int(l[0]) for l in allyears]
Run Code Online (Sandbox Code Playgroud)


rus*_*ro1 5

如果你想要一个简单的for循环,你也可以使用enumerate内置函数并解压你的内部列表:

for i, [n] in  enumerate(allyears): 
    allyears[i] = int(n) 
Run Code Online (Sandbox Code Playgroud)

您可以使用列表理解:

allyears = [int(e) for l in allyears for e in l]
Run Code Online (Sandbox Code Playgroud)

另外,你可以使用itertools.chain

from itertools import chain

list(map(int, chain.from_iterable(allyears)))
Run Code Online (Sandbox Code Playgroud)

输出:

[1916, 1919, 1922, 1912, 1924, 1920]
Run Code Online (Sandbox Code Playgroud)

如果您的内部列表中有多个元素,最后 2 个解决方案也将起作用