【问题标题】:Repeat values in array until specific length [duplicate]重复数组中的值直到特定长度[重复]
【发布时间】:2020-09-10 20:24:43
【问题描述】:

我需要某种功能或小技巧来解决我的问题。

所以我得到了一个列表让我们说 [1,2,3,4] 但我需要这个数组更长,重复相同的元素,所以假设我需要一个长度为 10 的数组,所以它变成: [1,2,3,4,1,2,3,4,1,2]

所以我需要以与列表中相同的值以相同的顺序扩展列表

returnString = the array or string to return with extended elements
array = the basic array which needs to be extended
length = desired length

编辑:

returnString = ""
array = list(array)
index = 0
while len(str(array)) != length:
    if index <= length:
        returnString += array[index]
        index += 1
    else:
        toPut = index % length
        returnString.append(array[toPut])
        index += 1
return returnString

【问题讨论】:

  • SO 不是代码编写服务。请edit您的问题并表明您尝试这样做。
  • 将新长度除以列表的长度,然后将列表乘以该列表的多次。如果它不均分,则连接足够多的元素以达到所需的长度。
  • @martineau 抱歉,我编辑了帖子!我希望它很清楚,我知道我的代码可以更干净!
  • 为什么要将数组转换为字符串?
  • 你为什么要使用字符串,问题是关于一个列表。

标签: python arrays repeat


【解决方案1】:

itertools.cycleitertools.islice 很简单:

from itertools import cycle, islice

input = [1, 2, 3, 4]
output = list(islice(cycle(input), 10))

[1, 2, 3, 4, 1, 2, 3, 4, 1, 2]

【讨论】:

  • 我看到您也可以将它用于就地扩展input.extend(islice(cycle(input), 6))(另请参阅我的答案,我在append 使用cycle 的列表中,但我没有想到@ 987654328@直到你提到它)
  • 当然,虽然我认为 OP 不想这样做
  • 问题有点模棱两可,因为它说“所以我需要扩展列表......”但随后有一些涉及新列表的代码。
【解决方案2】:

您可以使用itertools.cycle 重复遍历列表,并获取任意数量的值。

from itertools import cycle

lst = [1, 2, 3, 4]
myiter = cycle(lst)
print([next(myiter) for _ in range(10)])
[1, 2, 3, 4, 1, 2, 3, 4, 1, 2]

您还可以使用它来扩展列表(在迭代列表时是否追加到末尾并不重要,尽管删除项目不起作用)。

from itertools import cycle

lst = [1, 2, 3, 4]
myiter = cycle(lst)
for _ in range(6):
    lst.append(next(myiter))
print(lst)
[1, 2, 3, 4, 1, 2, 3, 4, 1, 2]

【讨论】:

    【解决方案3】:

    一种方法可能是:

    遍历所需的length - len(x_lst),这样你就有了10 - 4 = 6(要添加的新元素)。现在,由于列表元素应该重复,您可以随时通过索引 (0,1,2,3,4,5) 附加 x_lst 元素。

    x = [1,2,3,4]
    
    length = 10
    
    for i in range(length - len(x)):
        x.append(x[i])
    
    print(x)
    

    输出:

    [1, 2, 3, 4, 1, 2, 3, 4, 1, 2]
    

    【讨论】:

    • 这行得通,但令人困惑为什么行得通。
    • @Barmar 我在旅途中想到的东西!哈哈
    • 有一些解释会改进答案。
    • 这很聪明,但不一定只是在好的意义上。
    • 否则,是的。
    【解决方案4】:

    试试这个:

    n = 10
    lst =[1,2,3,4]
    new_lst = [lst[i%len(lst)] for i in range(n)]
    print(new_lst)
    

    输出:

    [1, 2, 3, 4, 1, 2, 3, 4, 1, 2]
    

    【讨论】:

      【解决方案5】:

      我会给你一个提示:

      如果你有这个array [1,2,3,4],那么你可以创建一个单独的newArray 来获取这个值并用这个重复的值填充newArray。 如何?环形!我认为for 可以对您执行此操作,只需将arraynewArray 指向它就知道它将填充哪个。

      【讨论】:

        【解决方案6】:
        NumOfValues = int(input("Number of Values: "))
        List1 = [1,2,3,4]
        List2 = []
        Count = 0
        while len(List2) < NumOfValues:
            List2.append(List1[Count])
            Count += 1
            if Count > len(List1) - 1:
                Count = 0
        print(List2)
        

        【讨论】:

        • 这将创建嵌套列表。
        • 当结果长度不是原始长度的倍数时,这将不起作用。
        • 他的原始列表有 4 个元素,他希望结果中有 10 个元素。
        • 你不能循环 2.5 次。
        • 如果它真的是整数次重复,你就不需要循环,只需List2 = List1 * NumOfRepeats
        【解决方案7】:

        首先将列表乘以它需要重复的次数。如果这不是所需的长度,请使用列表的适当部分对其进行扩展。

        old_len = len(original)
        new_len = 10
        result = original * new_len // old_len
        if new_len % old_len != 0:
            result += original[:new_len % old_len]
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2022-08-14
          • 1970-01-01
          • 2020-03-24
          • 2019-01-05
          • 2017-10-18
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多