首页 文章

在python中创建一个具有特定大小的空列表

提问于
浏览
346

我想创建一个可以容纳10个元素的空列表(或者是最好的方法) .

之后我想在该列表中分配值,例如,这应该显示0到9:

s1 = list();
for i in range(0,9):
   s1[i] = i

print  s1

但是,当我运行此代码时,它会生成错误,或者在另一种情况下,它只显示 [] (空) .

有人可以解释原因吗?

14 回答

  • 1

    加上上面写的惊人答案,

    要简单地创建一个空列表,假设使用“零”,

    lst=[0]*size
    
  • 5

    我有点惊讶的是,创建初始化列表的最简单方法不是这些答案中的任何一个 . 只需在 list 函数中使用生成器:

    list(range(9))
    
  • 96

    除非已使用至少 i+1 元素初始化列表,否则无法分配给 lst[i] = something 之类的列表 . 您需要使用append将元素添加到列表的末尾 . lst.append(something) .

    (如果使用字典,可以使用赋值表示法) .

    创建一个空列表:

    >>> l = [None] * 10
    >>> l
    [None, None, None, None, None, None, None, None, None, None]
    

    将值分配给上面列表的现有元素:

    >>> l[1] = 5
    >>> l
    [None, 5, None, None, None, None, None, None, None, None]
    

    请记住,像 l[15] = 5 这样的东西仍然会失败,因为我们的列表只有10个元素 .

    range(x)从[0,1,2,... x-1]创建一个列表

    # 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]
    

    适用于非引用类型,如数字 . 不幸的是,如果你想创建一个列表列表,你将遇到引用错误 . Python 2.7.6中的示例:

    >>> a = [[]]*10
    >>> a
    [[], [], [], [], [], [], [], [], [], []]
    >>> a[0].append(0)
    >>> a
    [[0], [0], [0], [0], [0], [0], [0], [0], [0], [0]]
    >>>
    

    如您所见,每个元素都指向同一个列表对象 . 要解决此问题,您可以创建一个方法,将每个位置初始化为不同的对象引用 .

    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方式(不是编写函数),但我不确定它是什么 . 很乐意纠正!

    编辑:这是 [ [] for _ in range(10)]

    示例:

    >>> [ [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]]
    
  • 2

    您可以 .append(element) 到列表,例如: s1.append(i) . 您当前要做的是访问不存在的元素( s1[i] ) .

  • 5

    有两种“快速”方法:

    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
    

    但是如果你对范围(例如 [0,1,2,3,...,x-1] )没问题,那么 range(x) 可能是最快的:

    >>> timeit("range(100)",number=10000)
    0.012513160705566406
    
  • 546

    (This was written based on the original version of the question.)

    我想创建一个空列表(或任何最好的方法)可以容纳10个元素 .

    所有列表都可以包含任意数量的元素,但仅限于可用内存的限制 . 重要的唯一"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 它 .

    这会给你一些类似的东西:

    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 不是某种神奇的关键词,它是 fordef 的语言的一部分,而是's a function. And guess what that function returns? That'右 - 这些整数的列表 . 所以整个功能都崩溃了

    def create_list():
        return range(10)
    

    现在你明白为什么我们根本不需要自己写一个函数了; range 已经是我们正在寻找的功能 . 虽然,再次,没有必要或理由"pre-size"名单 .

  • 2

    我很惊讶没有人建议这种简单的方法来创建空列表列表 . 这是一个旧线程,但只是为了完整性添加它 . 这将创建一个包含10个空列表的列表

    x = [[] for i in range(10)]
    
  • 0

    这是我在python中的2D列表的代码,它将读取否 . 来自输入的行:

    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('')
    
  • 16

    我在寻找类似的问题时遇到了这个问题 . 我必须构建一个2D数组,然后用dict中的元素替换每个列表的某些元素(在2D数组中) . 然后我遇到了this这个问题对我有帮助,也许这会帮助其他初学者到处走走 . 关键技巧是将2D数组初始化为numpy数组,然后使用 array[i,j] 而不是 array[i][j] .

    作为参考,这是我必须使用的代码段:

    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循环 . 希望这可以帮助其他人遇到这篇文章 .

  • 0

    此代码生成一个包含10个随机数的数组 .

    import random
    numrand=[]
    for i in range(0,10):
       a = random.randint(1,50)
       numrand.append(a)
       print(a,i)
    print(numrand)
    
  • 0

    使其作为一种功能更具可重用性 .

    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
    
  • -1
    s1 = []
    for i in range(11):
       s1.append(i)
    
    print s1
    

    要创建列表,只需使用这些括号:“[]”

    要向列表添加内容,请使用list.append()

相关问题