2016-11-10 7 views
0

私はネストされたリストmain_categoryを持っています、それぞれのネストされたリストはビジネス名のユニコード文字列です。ネストされたリストの最初の5行は以下の通りです:Pythonリストインデックス範囲外のネストされたリスト

[[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

あなたが実行コードを検証してもらえますか?あなたの質問から過去のコピーは私のためにうまく働く['メディカルセンター'、 'マッサージ'、 'タトゥー'、 '音楽とDVD'、 '食品']と( '医療センター'、 'マッサージ'、 'タトゥー' &DVDs '、' Food ') –

+0

あなたの完全なリストには空のサブリスト '[]'が含まれています。それを確認してください。 –

+1

[Pythonで各サブリストの最初の項目を抽出する]の可能な複製(http://stackoverflow.com/questions/25050311/extract-first-item-of-each-sublist-in-python) –

答えて

0

エラーがいずれかを示します/完全なリストではサブリストの一部は、空のリストがあります。あなたはそれを適切に処理する必要があります。あなたはそれがないときに、最初の項目をリストに空がある場合は、デフォルト値を代入し、インデックスにリスト内包で三項演算子を置くことができます。

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

ます。また、使用してzipのため、この修正プログラムを複製することができますそれはあなたがfillvalueを設定することができますitertoolsバリアントizip_longestです:

from itertools import izip_longest 

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

そうです。三元演算子が助けている!本当にありがとう。 – Parker

-1

リストのリストがあります。

for content in matrix: 

各繰り返しで、contentは完全なリストを返します。例えば、[u'Medical Centers', u'Health and Medical']である。

print(content[0])の場合、現在のリストの最初の値はu'Medical Centers'になります。 matrixのコンテンツのないリストがあります場合は、現在のリストがif content:Noneていないかどうかを確認する必要があるので、

print(content[0])は、IndexErrorを引き上げます。


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 
+0

これはリスト全体では機能しません – Parker

+0

コードにコンテキストを追加してください。 – ppperry

+0

完了。私が "空リスト"をチェックしていなかったので、これまで@Parkerではうまくいきませんでしたが、今はそれを修正しました。 –

関連する問題