0

各リストの最後の要素として整数を含むネストされたリストがあり、リストの次の項目が現在の項目より1つ多いかどうか、つまり現在のリストの最後の要素が104であるかどうかを確認しようとしています。次のリストの最後の要素が105の場合は、何かを実行します。

data=[[a,b,c,1200],[a,g,x,3401],[f,a,c,3402],[f,a,c,3403]etc]
for item in data:
    if next(item[-1])==item[-1]+1: #if next item is this item plus one
        #do something

これは上昇TypeError: Can't convert 'int' object to str implicitlyし続け、理由はわかりません。私が知らないPythonのリスト要素を比較するために加算を使用する方法はありますか?

(next()ではなく、完全なコードで前のアイテムと次のアイテムを取得する関数を使用しているため、next(item)の部分は正確ではない可能性がありますが、原則として同じです)

4

3 に答える 3

2

エラーメッセージはitem[1]、意図した場所で使用したことが原因ですitem[-1]。ただし、これを修正してもコードは修正さnext(item[-1])れません–意味がありません。以下を使用してこのループをリファクタリングすることをお勧めしますitertools.groupby()

from itertools import groupby, count
c = count()
for key, group in groupby(data, lambda x: x[-1] - next(c)):
    for item in group:
        # whatever

dataこれにより、サブリストの最後の要素で整数の連続実行のグループに分割されます。各内部ループは個別の連続実行で実行され、必要に応じてこの内部ループの前にセットアップコードを追加できます。

于 2012-08-03T11:47:45.553 に答える
1

これはあなたが望むことをします。

data=[[a,b,c,1200],[a,g,x,3401],[f,a,c,3402],[f,a,c,3403]etc]
previous = 0 # adjust if necessary
for item in data:
    if item[-1] == previous + 1:
        #do something
    previous = item[-1]

next(item[-1])あなたが思うことをしません。あなたはいくつかの推論を適用することによってこれを自分で推測することができます:

  1. next()、必要な「次の」要素の実際のプリカーサーを受け取りません。item
  2. 合格した場合itemnext()どのリストitemが含まれているかを把握する必要があります。
  3. item複数のリストにある場合はどうなりますか?同じリストで複数回発生した場合はどうなりますか?どのアイテムを返品しますか?

ご覧のとおり、リストの一部であるランダムなオブジェクトを渡すだけでは、リスト内の次のアイテムを取得する方法はありませ

実際に行うことnext()はまったく異なります。それはあなたにイテレータ/ジェネレータから生成された次のアイテムを与えます。

于 2012-08-03T11:58:38.283 に答える
0

タイプを適切に変換する必要があります。

if int(next(item[-1])) == int(item[1]) + 1:

また、なぜあなたがただやらないのか理解できません

 if int(item[0]) == int(item[1]) + 1:

ValueError変換が失敗した場合にキャッチする準備をしてください。

于 2012-08-03T11:46:21.847 に答える