【问题标题】:Beginner coder: Python list index out of range初学者编码器:Python 列表索引超出范围
【发布时间】:2018-02-09 19:57:08
【问题描述】:

我是编码新手,我从表格的列中提取数据,如下所示

print(column3)

x; y
x; y
x 
x; y; z
x 
x; y

然后我用 '; 分割字符串'

column_elements = column3.split('; ')
print(column_elements)

['x', 'y']
['x', 'y']
['x'] 
['x', 'y', 'z']
['x'] 
['x', 'y']

所以当我尝试使用

打印时
y = (column_elements[1]) 

由于并非所有列表的长度都长于 [0],我收到错误消息。我不是 确定如何从不同列表长度的数据集中获取每个元素。

【问题讨论】:

  • 您的预期输出究竟是什么?
  • 你知道python使用zero-based indexing吗?
  • @pault 我相信是的。请注意他说:“我收到一个错误,因为并非所有列表的长度都长于 [0]。当然,他的术语是关闭的,但我相信他试图说您只能访问他的某些子列表的第一个元素,这意味着该列表的长度为 1。
  • @ChristianDean 我也看到了,但我不确定。我发布了链接,因为 OP 说他们是初学者。如果你是这么想的,我不是故意讽刺的——就像我的个人资料照片说的那样,我喜欢积极思考。
  • @pault 这很好。我根本不认为你在讽刺 :-) 我同意,这个 OP 并不完全清楚。我只是提供我的两分钱。

标签: python python-2.7 list split


【解决方案1】:

不要使用直接索引,在列表的元素上使用for

l = [[0],[1,2,3],[5,2]]

for elem in l:
    for num in elem:
        print(num)

或(不太好,不需要,永远不要这样做)使用len 来获取内部列表的长度(从 0 开始到 len(l)-1 是索引):

for idx in range(len(l)):            # len(l) == 3, range(len(l)) == [0,1,2]  
    for idx2 in range(len(l[idx])):     # len of the sublist
        print(l[idx][idx2])

输出(两者):

0
1
2
3
5
2

如果你真的需要索引和值,使用enumeration并分解索引和值:

for idx, val in enumerate(l):   # yields you (0,[0]), (1,[1,2,3]), (2,[5,2])
    print(f"Index: {idx} with {val}")

输出:

Index: 0 with [0]
Index: 1 with [1, 2, 3]
Index: 2 with [5, 2] 

【讨论】:

    猜你喜欢
    • 2019-07-27
    • 1970-01-01
    • 2012-02-26
    • 1970-01-01
    • 2014-12-02
    • 2015-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多