【问题标题】:How to put the rest of the list as 0 in python? [duplicate]如何在python中将列表的其余部分设为0? [复制]
【发布时间】:2019-09-26 07:25:59
【问题描述】:

正如问题所述,我有一个列表包含 x 个元素。 例如 x 是 4:

first_data = [1, 2, 3, 4]

我想构建另一个固定大小为 8 的列表。这个列表将包含 first_data 的所有内容。如果 first_data 没有 8 个元素,则其余元素为 0。

例子:

final_data = [1, 2, 3, 4, 0, 0 ,0, 0]

到目前为止,我尝试了不同的方法,但没有奏效。

我怎样才能做到这一点?感谢并感谢任何帮助!

【问题讨论】:

  • 最终列表的大小是否大于或等于第一个列表的大小?
  • @rusu_ro1 它将确认大于第一个列表的大小
  • final_list = [*first_data, *[0] * (final_size - len(first_data)) ]

标签: python


【解决方案1】:

您可以使用maxlen 执行以下操作:

size = 8
final_data = first_data + [0] * max(0, size - len(first_data))
final_data
# [1, 2, 3, 4, 0, 0, 0, 0]

虽然这非常明确,但您可以更简洁并使用list 如何处理与负数的乘法(例如[0] * -3 == []):

final_data = first_data + [0] * (size - len(first_data))

如果您想修剪 first_data 以防它比大小长,只需在上述任何示例中使用 first_data[:size] 而不是 first_data

【讨论】:

  • omg 我完全没有想到使用数据的长度!非常感谢您对问题的回答和编辑!!!
【解决方案2】:

简单。你可以这样做。

array = [0]*8
arr = [1, 2, 3, 4]
array[:len(arr)] = arr

【讨论】:

  • 这是一个优雅的解决方案!非常感谢!!
【解决方案3】:

l 成为你的名单

你可以像这样初始化l

fixed_size = 8
l = [0] * fixed_size

【讨论】:

    【解决方案4】:

    首先,您需要知道丢失了多少个零。为此,请将所需长度与您拥有的长度进行比较:

    from typing import List
    
    def pad_with_zeros( initial: List, desired_len: int):
    
        zeros_to_add = desired_len - len(initial)
    
        if zeros_to_add > 0:
            padding = [0] * zeros_to_add
            return initial + padding
        else:
            # How do you want to handle the case when the initial list is longer than the desired output?
            pass
    

    然后我们创建一个新的零列表,并使用“+”扩展初始列表。当初始列表需要零填充,甚至大于所需的固定长度时,您将需要处理这种情况。

    【讨论】:

    • 我不知道缺少多少个零,因为列表是从用户值接受的,他们可以在一个范围内填充它,但不是常数。
    猜你喜欢
    • 2015-12-26
    • 2015-12-04
    • 2017-01-10
    • 1970-01-01
    • 2021-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多