2016-11-18 8 views
-1

文字列リストをループし、最初の2つの文字列をスキップして残りの文字列のを''に置き換えようとしています。 'jkl'Pythonエラー:TypeError:unhashable type:リストをループオーバーしようとしたときに 'list'

私はこれをどのように行うことができます 、'ghi':私はxxはのリストに等しくなるようにしたい

TypeError: unhashable type: 'list'

stringList = {['abc', 'def', 'ghi1', 'jkl1']} 
xx = [col.replace('1', '') for col in stringList if col not in stringList[1:2]] 
print(xx) 

私のコードは、このエラーがスローされますか?

+3

あなたがセットにリストを入れている: '' {[ 'ABC'、 'DEF'、 'ghi1'、 'jkl1']}。リストはハッシュ可能ではなく、セットはすべてのコンテンツをハッシュ可能にする必要があるため、これを行うことはできません。なぜあなたは '{..}'(セットと辞書)と '[..]'(リスト)の両方を使用していますか? –

+0

つまり、次の行には決して到達しません。トレースバックがあなたにこれを伝えていたでしょう。 –

+1

うわー、私の愚かなこと、私はカールがそこにあったことを完全に無視しました。ありがとう! – user1013388

答えて

2

Pythonでは、セットにハッシュ可能な要素が含まれている必要があります(Python glossary参照)。リストはハッシュ可能ではありませんが、タプルはあります。それはまだあなたの目的を果たしている場合は、リストの代わりにタプルを使用することができます。

stringList = {('abc', 'def', 'ghi1', 'jkl1')} 

あなたはより慎重にエラーメッセージを読むようにしてください。エラートレースは、エラーの原因となった行を示しています。さらに、メッセージそのものがリストについて不平を言っていますが、あなたの例では2つしかありません。

+1

OPは、タプルを含むセットではなく、文字列を含むリストを期待しているようです。 –

1

以下のコードが印刷さ['ghi', 'jkl']

は、あなたが何を望むかということですか?

stringList = ['abc', 'def', 'ghi1', 'jkl1'] 
xx = [col.replace('1', '') for col in stringList if col not in stringList[0:2]] 
print(xx) 

マルタインピータースはコメントで言ったように

は、あなたがセットの内部でリスト ['abc', 'def', 'ghi1', 'jkl1']を入れています。

A set object is an unordered collection of distinct hashable objects. Common uses include membership testing, removing duplicates from a sequence, and computing mathematical operations such as intersection, union, difference, and symmetric difference.

Python Set Documentation

関連する問題