あなたの例ではいくつかのことが起こっています。数字と改行文字の文字列を含むリストがあります。
list = ['350882 348521 350166\r\n']
そして、このリスト内で番号 ID を見つけようとしています。
id = 348521
if id not in list:
...
の文字列値を持つindex に 1 つの要素を持つ整数348521
を探すため、最初の条件は常にパスします。そのため、整数 348521 がそのリストに追加され、文字列と文字列の 2 つの要素のリストになります。出力が示すように、整数。list
list[0]
'350882 348521 350166\r\n'
繰り返しますが、リストは、リストの最初の要素の文字列ではなく、id で検索されます。
'348521'
の文字列表現が、リストに含まれるより大きな文字列に含まれているかどうかを確認しようとしている場合は、次の手順を実行できます。ただし、 の各要素に対してこれを行う必要があることに注意してlist
ください。
if str(id) not in list[0]: # list[0]: '350882 348521 350166\r\n'
... # ^^^^^^
ただし、検索のために空白で囲む必要があることに注意してくださいstr(id)
。そうしないと、次のようにも一致します。
2348521999
^^^^^^
「リスト」を「空白で区切られた整数の文字列」にするか、それとも整数のリストが本当に必要かは不明です。
達成しようとしているのが ID のリストを持ち、ID がまだ含まれていない場合にのみそのリストに ID を追加することだけである場合 (およびリスト内の要素の順序が重要でない場合)、セットは使用するのに最適なデータ構造になります。
ids = set(
[int(id) for id in '350882 348521 350166\r\n'.strip().split(' ')]
)
# Adding an ID already in the set has no effect
ids.add(348521)
文字列内の ID の順序が重要な場合は、ID を標準リストに保持し、条件付きチェックを使用します。
ids = [int(id) for id in '350882 348521 350166\r\n'.strip().split(' ')]
if 348521 not in ids:
...