【问题标题】:Python: List Index Out of Range / Append ListPython:列表索引超出范围/追加列表
【发布时间】:2020-02-16 14:21:52
【问题描述】:

这是我的列表示例(数据)Address list 这是列表的sn-p:

['PO Box 4653, Stockton, California, 95204',
 '157 Adams St., Stockton, California, 95204', ...

这是我的问题List index out of range (1) 'int' object is not iterable (2)

请注意,for i in a_list:for i in range(len(a_list): 等解决方案会生成“错误:列表索引超出范围”

说明: 我的地址列表没有空值,我尝试以各种方式附加空的“city_list”,如图所示……似乎没有任何效果。我不确定如何附加我的空列表 - 请帮助!

目标:抓取“a_list”并在for循环中拆分每个字符串,抓取城市值(索引1)并将其附加到空列表“city_list”

【问题讨论】:

  • 避免使用外部链接,并将问题中的内容作为格式正确的文本包含在内。
  • 在迭代中i 是一个数字,str(i) 产生一个简单的字符串,例如"0"。在 ',' 上拆分显然会返回一个列表,["0"],它只能用 [0] 索引。如果您使用for astr in alist:astr.split(','),它应该会更好。

标签: python list jupyter-notebook append for-in-loop


【解决方案1】:

这应该可行:

a_list = ['PO Box 4653, Stockton, California, 95204','157 Adams St., Stockton, California']

city_list = []
for i in range(0,len(a_list)):
    city_name = a_list[i].split(",")[1].strip()
    city_list.append(city_name)

print(city_list)

【讨论】:

  • 您遇到该错误的原因是因为您已编写: for i in (len(a_list)-1) :这里 i 是整数值,因此当您将其转换为字符串时,它变为“0 " 并且当你拆分它时,它变成 ["0"] 只有一个元素,因为它没有任何逗号。因此,当访问 ["0"][1] 时会出现错误,因为列表包含 1 个元素。无论哪种方式,问题都在于逻辑本身。
  • 你的例子有效!但是,我的列表中有一个问题显然不在循环中......
  • 很好,很乐意提供帮助。
【解决方案2】:

只是为您的问题提供更多背景信息:

数字 1 不起作用,因为您的列表中有一个元素没有','。仔细检查您的数据

数字 2 不起作用,因为您试图迭代一个整数,这没有意义。您需要将其设为一个范围,即range(len(a_list))

如果您关心索引,那么就这样做:

for address in a_list:
    # do something with address

它更简单、更简洁、更直观。永远记住KISS:保持简单愚蠢。通常最简单的解决方案是最好的。

由于您没有向我们提供数据,因此您必须自己解决#1。

【讨论】:

  • 我不确定您在此处为数字 1 标注的 ' , ' 是什么?
  • range(len(a_list)) 创建相同的 - 'list out of range problem' 。另外,您可以在第一个图片链接中看到数据...这是一个列表,地址字符串用逗号分隔
  • @Dgomonov x=i_split[1] 尝试获取您使用逗号 ',' 作为分隔符拆分的字符串的第二个元素。由于i_split[1] not 存在,它会引发错误。这意味着您的数据点中有一个没有逗号的元素。这有意义吗?
  • 这行返回什么:breweries_df.address.str.contains(',').value_counts()?
【解决方案3】:

您可能只想在最纯粹的意义上尝试使用for in 循环。

例如,你可以这样做

arr = [1, 2, 3, 4]

for x in arr:
    print(x)

然后应该打印出来

1
2
3
4

所以在你的情况下,只需使用for i in a_list

【讨论】:

  • 谢谢,但你的例子有点太简单了......在我的情况下,我试图在一个列表中拆分一个字符串并在 for 循环中附加一个空列表 - >错误出现。您的解决方案会产生相同的错误,我将在我的问题中添加该图像。
  • 请阅读我的帖子正文 -> 这是我的问题:列表索引超出范围 (1) 'int' 对象不可迭代 (2)'
  • 我知道这可能很困难,但是您有什么方法可以提供更多关于笔记本中其他内容的信息吗?有了一小部分数据,我可以毫无问题地将城市拉出来。我在想数据中的某处可能存在解析错误,这可能导致索引混乱。我真的不能说只有 2 行。
  • arr = ['PO Box 4653, Stockton, California, 95204', '157 Adams St., Stockton, California, 95204'] arr = list(arr) print(arr) city_list = [] for address in arr: print(address) address = str(address).split(",") print(address) city = address[1] city_list.append(city) print(city_list) 为我工作,两次拉出斯托克顿。
  • 你是对的,我发现了问题——它在数据集本身。因为在我的循环中,我希望在索引 [1] 处附加值,因此数据集中的一行在该索引处没有值,这导致循环抛出错误...
猜你喜欢
  • 2021-07-25
  • 1970-01-01
  • 2019-08-24
  • 2015-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多