Create an empty list in python with certain size
我想创建一个可以容纳10个元素的空列表(或者最好的方法)。
之后,我要在该列表中指定值,例如,应该显示0到9:
1 2 3 4 5 | s1 = list(); for i in range(0,9): s1[i] = i print s1 |
但是当我运行这段代码时,它会生成一个错误,或者在另一种情况下,它只显示
有人能解释为什么吗?
您不能分配给像
(如果使用字典,可以使用赋值符号)。
创建空列表:
1 2 3 | >>> l = [None] * 10 >>> l [None, None, None, None, None, None, None, None, None, None] |
为上述列表的现有元素赋值:
1 2 3 | >>> l[1] = 5 >>> l [None, 5, None, None, None, None, None, None, None, None] |
记住,像
范围(X)从[0,1,2,…]创建一个列表。X-1
1 2 3 4 | # 2.X only. Use list(range(10)) in 3.X. >>> l = range(10) >>> l [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] |
使用函数创建列表:
1 2 3 4 5 6 7 8 | >>> def display(): ... s1 = [] ... for i in range(9): # This is just to tell you how to create a list. ... s1.append(i) ... return s1 ... >>> print display() [0, 1, 2, 3, 4, 5, 6, 7, 8] |
列表理解(使用方块,因为对于范围,您不需要执行所有这些操作,只需返回
1 2 3 4 5 | >>> def display(): ... return [x**2 for x in range(9)] ... >>> print display() [0, 1, 4, 9, 16, 25, 36, 49, 64] |
试试这个:
1 | lst = [None] * 10 |
上面将创建一个大小为10的列表,其中每个位置都初始化为
1 2 3 | lst = [None] * 10 for i in range(10): lst[i] = i |
诚然,这不是做事情的Python式方式。最好这样做:
1 2 3 | lst = [] for i in range(10): lst.append(i) |
或者更好,使用如下列表理解:
1 | [i for i in range(10)] |
varunl当前接受的答案
1 2 3 | >>> l = [None] * 10 >>> l [None, None, None, None, None, None, None, None, None, None] |
适用于数字等非引用类型。不幸的是,如果要创建列表列表,则会遇到引用错误。python 2.7.6中的示例:
1 2 3 4 5 6 7 | >>> a = [[]]*10 >>> a [[], [], [], [], [], [], [], [], [], []] >>> a[0].append(0) >>> a [[0], [0], [0], [0], [0], [0], [0], [0], [0], [0]] >>> |
如您所见,每个元素都指向同一个列表对象。为了解决这个问题,您可以创建一个方法,将每个位置初始化为不同的对象引用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | def init_list_of_objects(size): list_of_objects = list() for i in range(0,size): list_of_objects.append( list() ) #different object reference each time return list_of_objects >>> a = init_list_of_objects(10) >>> a [[], [], [], [], [], [], [], [], [], []] >>> a[0].append(0) >>> a [[0], [], [], [], [], [], [], [], [], []] >>> |
可能有一种默认的、内置的python方法(而不是编写函数),但我不确定它是什么。会很高兴被纠正的!
编辑:是
例子:
1 2 | >>> [ [random.random() for _ in range(2) ] for _ in range(5)] >>> [[0.7528051908943816, 0.4325669600055032], [0.510983236521753, 0.7789949902294716], [0.09475179523690558, 0.30216475640534635], [0.3996890132468158, 0.6374322093017013], [0.3374204010027543, 0.4514925173253973]] |
您可以在列表中输入
有两种"快速"方法:
1 2 3 4 | x = length_of_your_list a = [None]*x # or a = [None for _ in xrange(x)] |
似乎
1 2 3 4 5 | >>> from timeit import timeit >>> timeit("[None]*100",number=10000) 0.023542165756225586 >>> timeit("[None for _ in xrange(100)]",number=10000) 0.07616496086120605 |
但是,如果您对某个范围(如
1 2 | >>> timeit("range(100)",number=10000) 0.012513160705566406 |
我很惊讶没有人建议用这种简单的方法来创建一个空列表列表。这是一个旧的线程,但是为了完整性而添加它。这将创建10个空列表的列表
1 | x = [[] for i in range(10)] |
(这是根据问题的原始版本编写的。)
I want to create a empty list (or whatever is the best way) can hold 10 elements.
所有列表可以容纳任意多个元素,只受可用内存的限制。唯一重要的列表"大小"是当前列表中的元素数。
but when I run it, the result is []
调用
这里没有理由传入值。(也没有真正的理由去创建一个函数,但这也不重要。)你想要"创建"一些东西,所以这就是你的函数的输出。创建所描述的内容不需要任何信息,因此不要在中传递任何信息。为了得到信息,
这会给你带来如下好处:
1 2 3 4 5 | def display(): s1 = list(); for i in range(0, 9): s1[i] = i return s1 |
您将注意到的下一个问题是,您的列表实际上只有9个元素,因为端点被
1 2 3 4 5 | def create_list(): result = list() for i in range(10): result[i] = i return result |
然而,这仍然缺少标记;
1 2 | def create_list(): return range(10) |
现在你明白了为什么我们根本不需要自己编写函数;
我有点惊讶,创建初始化列表的最简单方法不在这些答案中。只需在
1 | list(range(9)) |
下面是我在python中的2d列表代码,它将从输入中读取行数:
1 2 3 4 5 6 7 8 9 10 11 | empty = [] row = int(input()) for i in range(row): temp = list(map(int, input().split())) empty.append(temp) for i in empty: for j in i: print(j, end=' ') print('') |
使用嵌套列表理解创建大小为
1 | m = [[None for _ in range(n)] for _ in range(n)] |
使其作为一个函数更加可重用。
1 2 3 4 5 6 7 8 9 10 | def createEmptyList(length,fill=None): ''' return a (empty) list of a given length Example: print createEmptyList(3,-1) >> [-1, -1, -1] print createEmptyList(4) >> [None, None, None, None] ''' return [fill] * length |
此代码生成一个包含10个随机数的数组。
1 2 3 4 5 6 7 | import random numrand=[] for i in range(0,10): a = random.randint(1,50) numrand.append(a) print(a,i) print(numrand) |
我在寻找类似问题时遇到了这个问题。我必须构建一个二维数组,然后用dict中的元素替换每个列表中的一些元素(在二维数组中)。然后我遇到了这个问题,这个问题帮助了我,也许这能帮助其他初学者四处走动。关键技巧是将二维数组初始化为numpy数组,然后使用
作为参考,这是我必须使用的代码:
1 2 3 4 5 6 7 8 9 10 11 12 | nd_array = [] for i in range(30): nd_array.append(np.zeros(shape = (32,1))) new_array = [] for i in range(len(lines)): new_array.append(nd_array) new_array = np.asarray(new_array) for i in range(len(lines)): splits = lines[i].split(' ') for j in range(len(splits)): #print(new_array[i][j]) new_array[i,j] = final_embeddings[dictionary[str(splits[j])]-1].reshape(32,1) |
现在我知道我们可以使用列表理解,但是为了简单起见,我使用了嵌套的for循环。希望这能帮助其他遇到这个职位的人。
1 2 3 4 5 | s1 = [] for i in range(11): s1.append(i) print s1 |
要创建列表,只需使用以下方括号:"[]"
要向列表中添加内容,请使用list.append()。