【问题标题】:How to extract individual digits from a list of integers?如何从整数列表中提取单个数字?
【发布时间】:2020-05-09 17:57:25
【问题描述】:

对 python 不熟悉,这给我带来了一些麻烦

给定一个整数列表,如

 [2, 0, 0, 0, 0, 12, 0, 8]

我如何提取每个元素的单个数字以形成一个新列表

 [2,1,2,8] 

我有遍历每个元素并使用模运算符的想法,但我似乎找不到正确的逻辑

非常感谢任何帮助

【问题讨论】:

  • 列表中元素的顺序重要吗?比如 20 应该先分解为 0 然后 2 还是应该先分解 2?
  • @SumedhPatkar 不,这种情况下的顺序无关紧要。我只需要提取每个单独的数字,然后将它们加在一起。

标签: python python-3.x list cs50


【解决方案1】:

我认为最简单的方法是将值转换为字符串并提取单独的字符并将它们转换回整数。

例如:

lst = [2, 0, 0, 0, 0, 12, 0, 8]

digits = []
for value in lst:
    if value != 0:
        digits.extend(map(int, str(value)))

print(digits)

打印:

[2, 1, 2, 8]

【讨论】:

    【解决方案2】:

    您可以先将所有数字转换为字符串列表,将每个字符串转换为整数,然后使用itertools.chain.from_iterable 将结果展平:

    >>> from itertools import chain
    >>> lst = [2, 0, 0, 0, 0, 12, 0, 8]
    >>> list(chain.from_iterable(map(int, str(x)) for x in lst if x != 0))
    [2, 1, 2, 8]
    

    【讨论】:

      【解决方案3】:

      既然 0 也是一个数字,想象一下下面的情况,如果一个数字是 10, 20, 30, 40..... 那么它应该是 1, 0, 2, 0, 3, 0...分别。

      那么您的新列表中需要 0 吗?

      如果这个问题的答案是“否”,那么thisthis 的答案将失败。这是一种解决方案。

      myList = [10, 0, 0, 0, 0, 12, 0, 8]
      
      newList = []
      for i in myList:
          while i >= 10:
              newList.append(i%10)
              i = i//10
          newList.append(i)
      
      newList = [ x for x in newList if x != 0 ]
      

      此解决方案还满足您的模逻辑。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-12
        • 1970-01-01
        • 2017-03-11
        • 1970-01-01
        相关资源
        最近更新 更多