如何复制列表一定次数

时间:2017-03-08 05:53:38

标签: python list

我希望复制一个列表超过1000次,然后附加到一个更大的列表。

例如:

a = ['1','2','3','4]

复制此列表然后将其嵌套一百次:

output = [['1','2','3','4],['1','2','3','4],['1','2','3','4],['1','2','3','4],['1','2','3','4].....]

到目前为止,我只遇到了* 2,这不是我想要的。

6 个答案:

答案 0 :(得分:5)

您可以通过以下方式轻松复制列表。

a = ['1','2','3','4']
output = [a]*1000

以上将创建参考。 如果您需要单独的副本,请执行以下操作。

a = ['1','2','3','4']
output = [a[:] for i in range(1000)]

答案 1 :(得分:3)

在这种情况下,您应该使用[a]*2。但请注意,*运算符将创建对主对象的多重引用,因为它是一个可变对象。相反,作为一种更加pythonic的方式,您可以使用itertools.repeat(),它将为您提供主要对象的单独副本:

In [2]: from itertools import repeat

In [5]: a = ['1','2','3','4']

In [6]: list(repeat(a, 4))
Out[6]: 
[['1', '2', '3', '4'],
 ['1', '2', '3', '4'],
 ['1', '2', '3', '4'],
 ['1', '2', '3', '4']]

答案 2 :(得分:1)

你非常接近。虽然a * 2可能会为您提供[1, 2, 3, 4, 1, 2, 3, 4],但有一种方法可以使用相同的运算符来获得所需的结果。它只是重复内容,所以请尝试[a] * 2

答案 3 :(得分:0)

output = print([a]*no_of_count)

答案 4 :(得分:0)

使用列表理解

>>> b = [a for i in range(3)]
>>> b
[['1', '2', '3', '4'], ['1', '2', '3', '4'], ['1', '2', '3', '4']]

您可以对列表执行各种此类操作。 请检查此链接here

答案 5 :(得分:0)

根据我的理解,您需要复制列表而不使用相同的引用以便将来执行某些操作。

您将尝试使用这段代码生成包含n次复制列表的列表

# imports
import numpy as np
import matplotlib.pyplot as plt
import math


# variables used throughout the program
dlt = math.exp(-5)
eps = math.exp(1) * math.pow(10, -4)
my_p = 123457

the_hashes = map(str.split, open('the_hashes.txt', 'r'))
the_hashes = [[int(float(j)) for j in i] for i in the_hashes]
end = len(the_hashes)

rows = math.ceil(math.log(1/dlt))
cols = math.ceil(math.exp(1)/eps)
C = np.zeros((rows,cols))


# Returns hash(x) for hash function 
# given by parameters a, b, p and n_buckets
def hash_fun(a, b, p, n_buckets, x):
    y = x % p
    hash_val = (a*y + b) % p
    output = hash_val % n_buckets
    return(output)


# read the file line by line, implementing the algorithm
counter = 0
with open("the_words.txt", "r") as file:
    for word in file:
        counter = counter + 1
        my_x = int(word)

        # loop over the 5 different pairs of (a,b) values for the hashes
        for i in range(0,end):
            my_a = the_hashes[i][0]
            my_b = the_hashes[i][1]

            my_output = hash_fun(my_a, my_b, my_p, cols, my_x)
            C[i,my_output] += 1

        if(counter % 10000 == 0):
            print counter

或者只是简单地使用这个简写:

import copy
a = [1,2,3,4]
n = 1000
def replicateMaster(n, a):
    output= []
    while n != 0:
        n -= 1
        output.append(copy.deepcopy(a))
    return output

希望这段代码可以解决您的问题