2017-10-27 10 views
-1

2アイテムのリストを[datestamp, timestamp]として生成するプロセスがあります。私のようにリスト内包にこれを置けばリストの理解ValueError:アンパックする値が多すぎる

は:

[(ds,ts) for ds,ts in process] 

私の望ましい結果は次のとおりです。私は何を得る

[(ds,ts), (ds,ts), (ds,ts)] 

ValueError: too many values to unpackです。

プロセスによって返されたリストにforループ反復ので、これは次のとおりです。

for ds,ts in [datestamp, timestamp] 

は、各文字を越えds=datestampts=timestampではなく、繰り返し処理を割り当てていません...これは働いていた場合、それは(d,t)を与えるだろう、 (a,i),(t,m)(e,e)

私は間違っていることを知っています...しかし、この仕事をする方法ではありません! (およびええ、これは私が答えはこの作品

+1

あなたは '[(X [0]、[1]×の後にあります)for x in process] '?各反復で2つのアイテムを持つ単一のリストオブジェクトがあるので、リストにインデックスを付けるだけです。 – EdChum

+1

2つの要素を含むリストがあり、2つの要素を含むタプルに変換したいのですか? 'my_tuple = tuple(my_list)'はどうですか? – Kevin

+1

'process'の内容を投稿してください。 – Ajax1234

答えて

1

リアルシンプルになります知っている...愚かな感じるん:

process = [[1,2],[3,4],[5,6]] 
a = [] 
for ds, ts in process: 
    print(ds, ts) 
    a.append((ds, ts)) 

と同様に

z = [(ds, ts) for (ds, ts) in process] 
q = [(ds, ts) for ds, ts in process] 

あなたが'ValueError: too many values to unpack'を取得している場合例外、プロセスは2つ以上のアイテムを持つイテラブルを生成している必要があります。

リストの解説を解き放ち、Handle the exception - print s何が間違っているのかを見るために例外的なスイートに関連する何か、そしてソースに逆戻りしてください。何かのように

process = [[1,2],[3,4],[5,6], [7,8,9]] 

a = [] 
try: 
    for thing in process: 
     ds, ts = thing 
     a.append((ds, ts)) 
except ValueError as e: 
    print(e, '\t', thing) 
0

あなたはデバッグする必要があります。あなたのリストには、あなたが期待しているペアではないアイテムがいくつかあります。

problems = [(idx, value) for idx,value in enumerate(process) if len(value)!=2] 

これはあなたのリストで、問題のインデックスとアイテムのリストが表示されます:あなたは彼らのようになります見つけることができます

一つの方法。

それは例えばエラー - を与えた場合、TypeErrorvalueオブジェクトが__len__ METHOD-を持っていないので、その後にそれを変更します。

problems = [(idx, value) for idx,value in enumerate(process) if not hasattr(value, '__len__')] 
関連する問題