Python列表索引超出范围嵌套列表

时间:2016-11-10 15:18:21

标签: python list range

我有一个嵌套列表main_category,每个嵌套列表都是一个商业名称的unicode字符串。嵌套列表的前五行如下:

[[u'Medical Centers', u'Health and Medical'],
[u'Massage', u'Beauty and Spas'],
[u'Tattoo', u'Beauty and Spas'],
[u'Music & DVDs', u'Books, Mags, Music and Video', u'Shopping'],
[u'Food', u'Coffee & Tea']]

所以我想得到每个列表的第一个元素,我已经尝试了列表理解,zip,但没有任何作用。

new_cate = [d[0] for d in main_category]
lst = zip(*main_category)[0]

但是所有人都给了我

IndexErrorTraceback (most recent call last)
<ipython-input-49-4a397c8e62fd> in <module>()
----> 1 lst = zip(*main_category)[0]
IndexError: list index out of range

我真的不知道这有什么问题。有人可以帮忙吗?非常感谢!

2 个答案:

答案 0 :(得分:0)

错误表示完整列表中的一个/部分子列表是空列表。你需要妥善处理。您可以在列表推导中放置三元运算符,以在列表为空时替换默认值,并在不包含第一个项目时对其进行索引:

default = ''
new_cate = [d[0] if d else default for d in main_category]
#                ^^^^-> test if list is truthy

您还可以使用zip变体izip_longest复制itertools的此修补程序,以便设置fillvalue

from itertools import izip_longest

default = ''
lst = list(izip_longest(*main_category, fillvalue=default))[0]

答案 1 :(得分:-1)

所以你有一份清单。

for content in matrix:

每次迭代content都会返回完整列表。例如[u'Medical Centers', u'Health and Medical']

如果您print(content[0]),您将获得当前列表的第一个值,即u'Medical Centers'

如果matrix中没有内容的列表,print(content[0])会引发IndexError,那么您需要检查当前列表是否不是None if content:

matrix = [[u'Medical Centers', u'Health and Medical'],
[u'Massage', u'Beauty and Spas'],
[u'Tattoo', u'Beauty and Spas'],
[u'Music & DVDs', u'Books, Mags, Music and Video', u'Shopping'],
[u'Food', u'Coffee & Tea']]

for content in matrix:
    if content:
        print(content[0])

>>> Medical Centers
>>> Massage
>>> Tattoo
>>> Music & DVDs
>>> Food