# 2.X only. Use list(range(10)) in 3.X.
>>> l = range(10)
>>> l
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
使用函数创建列表:
>>> 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]
列表理解(使用正方形,因为对于范围你不需要做所有这些,你只需返回 range(0,9) ):
>>> def display():
... return [x**2 for x in range(9)]
...
>>> print display()
[0, 1, 4, 9, 16, 25, 36, 49, 64]
11
试试这个:
lst = [None] * 10
以上将创建一个大小为10的列表,其中每个位置初始化为 None . 之后,您可以向其添加元素:
lst = [None] * 10
for i in range(10):
lst[i] = i
不可否认,这不是Pythonic做事的方式 . 这样做更好:
lst = []
for i in range(10):
lst.append(i)
或者甚至更好,使用这样的列表推导:
[i for i in range(10)]
52
varunl目前接受的答案
>>> l = [None] * 10
>>> l
[None, None, None, None, None, None, None, None, None, None]
x = length_of_your_list
a = [None]*x
# or
a = [None for _ in xrange(x)]
似乎 [None]*x 更快:
>>> from timeit import timeit
>>> timeit("[None]*100",number=10000)
0.023542165756225586
>>> timeit("[None for _ in xrange(100)]",number=10000)
0.07616496086120605
调用 display 不会像写入的那样修改传入的列表 . 你的代码说“ s1 是传递给函数的任何东西的名字;好吧,现在我们要做的第一件事就是完全忘掉那件事,让 s1 开始引用新创建的 list . 现在我们' ll修改 list “ . 这对您传入的值没有影响 .
没有理由在这里传递一个值 . (也没有真正的理由创建一个函数,但是's beside the point.) You want to 1658645 something, so that is the output of your function. No information is required to create the thing you describe, so don' t传递任何信息 . 要获取信息, return 它 .
这会给你一些类似的东西:
def display():
s1 = list();
for i in range(0, 9):
s1[i] = i
return s1
您将注意到的下一个问题是您的列表实际上只有9个元素,因为 range 函数跳过了终点 . (正如附注, [] 和 list() 一样,分号是不必要的, s1 是变量的一个不好的名字,如果你从 0 开始, range 只需要一个参数 . )那么你最终得到
def create_list():
result = list()
for i in range(10):
result[i] = i
return result
然而,这仍然是标志; range 不是某种神奇的关键词,它是 for 和 def 的语言的一部分,而是's a function. And guess what that function returns? That'右 - 这些整数的列表 . 所以整个功能都崩溃了
def create_list():
return range(10)
现在你明白为什么我们根本不需要自己写一个函数了; range 已经是我们正在寻找的功能 . 虽然,再次,没有必要或理由"pre-size"名单 .
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('')
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)
14 回答
加上上面写的惊人答案,
要简单地创建一个空列表,假设使用“零”,
我有点惊讶的是,创建初始化列表的最简单方法不是这些答案中的任何一个 . 只需在
list
函数中使用生成器:除非已使用至少
i+1
元素初始化列表,否则无法分配给lst[i] = something
之类的列表 . 您需要使用append将元素添加到列表的末尾 .lst.append(something)
.(如果使用字典,可以使用赋值表示法) .
创建一个空列表:
将值分配给上面列表的现有元素:
请记住,像
l[15] = 5
这样的东西仍然会失败,因为我们的列表只有10个元素 .range(x)从[0,1,2,... x-1]创建一个列表
使用函数创建列表:
列表理解(使用正方形,因为对于范围你不需要做所有这些,你只需返回
range(0,9)
):试试这个:
以上将创建一个大小为10的列表,其中每个位置初始化为
None
. 之后,您可以向其添加元素:不可否认,这不是Pythonic做事的方式 . 这样做更好:
或者甚至更好,使用这样的列表推导:
varunl目前接受的答案
适用于非引用类型,如数字 . 不幸的是,如果你想创建一个列表列表,你将遇到引用错误 . Python 2.7.6中的示例:
如您所见,每个元素都指向同一个列表对象 . 要解决此问题,您可以创建一个方法,将每个位置初始化为不同的对象引用 .
有一种默认的内置python方式(不是编写函数),但我不确定它是什么 . 很乐意纠正!
编辑:这是
[ [] for _ in range(10)]
示例:
您可以
.append(element)
到列表,例如:s1.append(i)
. 您当前要做的是访问不存在的元素(s1[i]
) .有两种“快速”方法:
似乎
[None]*x
更快:但是如果你对范围(例如
[0,1,2,3,...,x-1]
)没问题,那么range(x)
可能是最快的:(This was written based on the original version of the question.)
所有列表都可以包含任意数量的元素,但仅限于可用内存的限制 . 重要的唯一"size"列表是其中的元素数量 currently .
print display s1
是无效的语法;根据您对所见内容的描述,我认为您的意思是display(s1)
,然后是print s1
. 要运行它,您必须先前已定义全局s1
才能传入该函数 .调用
display
不会像写入的那样修改传入的列表 . 你的代码说“s1
是传递给函数的任何东西的名字;好吧,现在我们要做的第一件事就是完全忘掉那件事,让s1
开始引用新创建的list
. 现在我们' ll修改list
“ . 这对您传入的值没有影响 .没有理由在这里传递一个值 . (也没有真正的理由创建一个函数,但是's beside the point.) You want to 1658645 something, so that is the output of your function. No information is required to create the thing you describe, so don' t传递任何信息 . 要获取信息,
return
它 .这会给你一些类似的东西:
您将注意到的下一个问题是您的列表实际上只有9个元素,因为
range
函数跳过了终点 . (正如附注,[]
和list()
一样,分号是不必要的,s1
是变量的一个不好的名字,如果你从0
开始,range
只需要一个参数 . )那么你最终得到然而,这仍然是标志;
range
不是某种神奇的关键词,它是for
和def
的语言的一部分,而是's a function. And guess what that function returns? That'右 - 这些整数的列表 . 所以整个功能都崩溃了现在你明白为什么我们根本不需要自己写一个函数了;
range
已经是我们正在寻找的功能 . 虽然,再次,没有必要或理由"pre-size"名单 .我很惊讶没有人建议这种简单的方法来创建空列表列表 . 这是一个旧线程,但只是为了完整性添加它 . 这将创建一个包含10个空列表的列表
这是我在python中的2D列表的代码,它将读取否 . 来自输入的行:
我在寻找类似的问题时遇到了这个问题 . 我必须构建一个2D数组,然后用dict中的元素替换每个列表的某些元素(在2D数组中) . 然后我遇到了this这个问题对我有帮助,也许这会帮助其他初学者到处走走 . 关键技巧是将2D数组初始化为numpy数组,然后使用
array[i,j]
而不是array[i][j]
.作为参考,这是我必须使用的代码段:
现在我知道我们可以使用列表理解但为了简单起见我使用嵌套的for循环 . 希望这可以帮助其他人遇到这篇文章 .
此代码生成一个包含10个随机数的数组 .
使其作为一种功能更具可重用性 .
要创建列表,只需使用这些括号:“[]”
要向列表添加内容,请使用list.append()