我有一个嵌套列表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
我真的不知道这有什么问题。有人可以帮忙吗?非常感谢!
答案 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