【问题标题】:Creating an empty list to have data assigned afterwards创建一个空列表以在之后分配数据
【发布时间】:2011-05-10 06:51:04
【问题描述】:

假设我想创建一个名称列表

listOfNames = []

然后我有一个while循环,例如

count = 0
while listOfNames[count] < 10:
    nameList[count] = raw_input("Enter a name: ")
    count += 1

Python 说列表索引超出范围,但列表索引应该为 0,对吗?

如何在每次运行 while 循环时添加到列表中?我假设我的列表分配有问题。

【问题讨论】:

    标签: python list indexing range


    【解决方案1】:
    count = 0
    while listOfNames[count] < 10:
        nameList.append(raw_input("Enter a name: "))
        count += 1
    

    使用 append 来快速 n 简单...

    或者:

    nameList[len(nameList):] = [raw_input("Enter a name: ")]
    

    编辑:您的意思是要附加 listOfNames 而不是 nameList?

    【讨论】:

    • 呃。数组切片太糟糕了。
    【解决方案2】:

    一个空列表还没有任何索引,它是一个空列表!如果你想填充它,你必须这样做:

    while count < 10:
        nameList.append(raw_input("Enter a name: "))
        count += 1
    

    这样,您的条件将被评估,并且使用 append 方法,您将能够在列表中添加新项目。

    有一些高级技巧可以轻松完成此操作,但考虑到您的水平,我认为您最好先了解此代码,然后再继续。

    【讨论】:

    • 习惯上,这将是 for _ in range(10):,因为 _ 是 Python 中的“未使用”变量,而 for 循环不需要额外的变量或递增指令。
    • @syrion:是的,你是对的。更简单的是,我们可以在这里使用列表推导。但我认为 OP 应该首先了解 为什么 他的代码不起作用以及 如何 修复它。他稍后会优化。
    • 真的。我只是在此处注明“Pythonic”习语以供 OP 参考。
    【解决方案3】:

    最惯用的方法是使用列表推导:

    namelist = [raw_input("Enter a name: ") for i in range(10)]
    

    (或者用_代替i,虽然我个人不会)

    这具有动态创建列表的优点,同时无需使用 append() 方法或显式索引。

    【讨论】:

      【解决方案4】:

      您的列表分配是正确的,您的问题在于您使用尚不存在的索引。

          count = 0
      while listOfNames[count] < 10:
          nameList[count] = raw_input("Enter a name: ")
          count += 1
      

      我很确定这段代码没有达到您的预期。这段代码正在做的是检查 listOfNames 的第一个到第十个元素是否有小于 10 的数字,但是由于它是一个空列表,因此没有索引为 0 的元素或任何其他索引,因此您的列表索引超出范围异常。

      以下内容将按您的意愿工作:

      count = 0
      while len(listOfNames) < 10:     # Keep going until the list has 10 elements
          nameList.append(raw_input("Enter a name: "))
          count += 1
      

      但是我建议使用以下内容,它做的事情完全相同,但应该更有效并且更美观:

      for _ in range(10):
          listOfNames.append(raw_input("Enter a name:"))
      

      注意使用追加而不是索引引用。这会将新元素添加到列表的末尾,而使用您尝试做的索引将失败,因为分配和索引必须首先存在一个元素。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-12-15
        • 2011-02-27
        • 2016-09-19
        • 1970-01-01
        • 2022-01-15
        • 2022-01-26
        • 1970-01-01
        相关资源
        最近更新 更多