【问题标题】:How to duplicate list elements according to another counts list? [duplicate]如何根据另一个计数列表复制列表元素? [复制]
【发布时间】:2020-08-27 00:16:24
【问题描述】:

我有两个列表,我正在尝试根据它们出现的次数创建多个数字副本。

numbers = [0, 1, 2]
amount = [1, 2, 3]

我试过了:

total = []
n = 0
for i in range(len(numbers)):
    product = numbers[n] * amount[n]
    n += 1
    total.extend(product)

但我得到了错误:

TypeError: 'int' object is not iterable.

我的预期输出是:

total = [0, 1, 1, 2, 2, 2]

【问题讨论】:

  • total.extend(product) 更改为 total.append(product) 这将修复您的类型错误,但代码在逻辑上存在缺陷,因此您不会得到预期的结果。
  • 当你可以使用i——循环的变量时,你为什么还要维护n
  • @Rashid'Lee'Ibrahim 您建议的修复将使代码具有有缺陷的逻辑...... OP 的代码只是缺少两个括号以使其按预期工作,我不会说他的逻辑有缺陷

标签: python python-3.x


【解决方案1】:

使用zip

result = []
for i, j in zip(numbers, amount):
    result.extend([i] * j)

print(result)

[0, 1, 1, 2, 2, 2]

【讨论】:

    【解决方案2】:

    您的错误在以下行内:

    product = numbers[n] * amount[n]
    

    它不会产生一个列表,而是一个整数。因为您将两个数字相乘。

    你真正想要的是

    product = [numbers[n]] * amount[n]
    

    在这里试试: https://repl.it/repls/WholeHuskyInterfaces

    【讨论】:

      猜你喜欢
      • 2019-10-24
      • 1970-01-01
      • 2016-03-21
      • 1970-01-01
      • 2020-12-28
      • 1970-01-01
      • 1970-01-01
      • 2015-10-26
      • 2023-03-20
      相关资源
      最近更新 更多