【问题标题】:Flatten a list of lists containing single strings to a list of ints [duplicate]将包含单个字符串的列表列表展平为整数列表[重复]
【发布时间】:2020-04-03 08:53:29
【问题描述】:

我的字符串列表看起来像

allyears
#[['1916'], ['1919'], ['1922'], ['1912'], ['1924'], ['1920']]

我需要这样的输出:

#[1916, 1919, 1922, 1912, 1924, 1920]

试过这个:

for i in range(0, len(allyears)): 
    allyears[i] = int(allyears[i]) 

但我有错误

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

【问题讨论】:

标签: python


【解决方案1】:

你可以这样做:

allyears = [int(i[0]) for i in allyears]

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

错误是因为 ypu 无法将 list 转换为 int

【讨论】:

  • 如果嵌套列表中只有一项,那么无需索引也可以做到这一点:[int(*item) for item in allyears]
【解决方案2】:

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

for i in range(0, len(allyears)): 
    allyears[i] = int(allyears[i][0]) 

或者,您可以使用列表推导式在一行中执行此操作:

allyears = [int(l[0]) for l in allyears]

【讨论】:

    【解决方案3】:

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

    for i, [n] in  enumerate(allyears): 
        allyears[i] = int(n) 
    

    您可以使用列表推导:

    allyears = [int(e) for l in allyears for e in l]
    

    另外,你可以使用itertools.chain

    from itertools import chain
    
    list(map(int, chain.from_iterable(allyears)))
    

    输出:

    [1916, 1919, 1922, 1912, 1924, 1920]
    

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

    【讨论】:

      【解决方案4】:

      您需要访问列表的各个元素而不是列表本身。

      试试:

      for i in range(0, len(allyears)): 
          allyears[i] = int(allyears[i][0]) 
      

      【讨论】:

        【解决方案5】:

        试试:

        allyears = [['1916'], ['1919'], ['1922'], ['1912'], ['1924'], ['1920']]
        
        out = []
        for i in range(0, len(allyears)): 
            out.append(int(allyears[i][0]))
        
        print (out)
        

        【讨论】:

          【解决方案6】:

          你试过这个:

          for i in range(0, len(allyears)): 
              allyears[i] = int(allyears[i]) 
          

          得到了错误

          TypeError: int() argument must be a string, a bytes-like object or a number, not 'list'
          

          接下来你应该尝试的是:

          for i in range(0, len(allyears)): 
              print(allyears[i])
          

          你会看到你正在循环这些值:

          ['1916']
          ['1919']
          ['1922']
          

          等等

          不能使用int() 将它们转换为int,因为它们是列表。您应该使用 [0] 索引获取这些列表中的唯一元素,如下所示:

          >>> for i in range(0, len(allyears)): 
          ...    print(allyears[i][0])
          1916
          1919
          1922...
          

          现在您知道如何更正原始代码了:

          for i in range(0, len(allyears)): 
              allyears[i] = int(allyears[i][0])
          

          更多Pythonic 解决您的问题将使用list comprehension

          allyears = [int(i[0]) for i in allyears]
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2021-02-27
            • 2022-09-23
            • 1970-01-01
            • 1970-01-01
            • 2012-05-08
            • 1970-01-01
            • 2015-07-24
            相关资源
            最近更新 更多