-2

new のどの数字が new の最初の 10 個の数字に含まれているかを示すスクリプトを Python で作成しました。私はそれが実際よりも複雑に見えることを知っています。それは、後でスクリプトでやろうとしていることと関係があります。今のところ、10 番目より前の番号だけでなく、リスト「new」のすべての番号に対して「each」を出力する理由を理解しようとしています。

これが私のコードです:

i = 10
new = ['A lot of numbers'] 

for each in re.findall(r'[0-9]+', new):
    if any(each for x in (re.findall(r'[0-9]+', new)[0:i])):
        print each
    else:
        pass
4

3 に答える 3

0

new が文字列のリストで、そのうちのいくつかは "123" のような数字であり、これらの数字の最初の 10 個が必要な場合:

allnumbers = [x for x in new if re.match("[0-9]+", x)]
first10numbers = allnumbers[:10]

(Python 2.x の場合)

new が文字列の場合、次のようになります

allnumbers = [x for x in re.findall("[0-9]+", x)]

これを後で何をしているのか正確にはわかりませんが、最初の 10 個の数字に表示される場合にのみ後の数字を印刷しようとしている場合は、次のようにすることができます。

for number in [x for x in allnumbers if x in first10numbers]:
    print number
于 2012-08-17T03:40:48.460 に答える
0

の最初の 10 文字を探している場合、newもしかして

if any(each for x in (re.findall(r'[0-9]+', new[0:i]))):

それよりも:

if any(each for x in (re.findall(r'[0-9]+', new)[0:i])):

また、newリストになるということでしたか?にリストを渡すことはできませんfindall

else: pass最後に、ステートメントは必要ないことに注意してくださいif。 は単独で正常に機能します。

于 2012-08-17T02:55:50.757 に答える
0

ジェネレーター式で何らかの方法で x を参照する必要があります。そうしないとany([each, each, each, ....])、 をチェックするだけで、それぞれが true と評価される場合に常に true と評価されます (正規表現では常に true となります)。最初の i 項目のいずれかがそれぞれに等しいかどうかをテストする、次のようなものが必要だと思います。

if any(x==each for x in (re.findall(r'[0-9]+', new)[0:i])):

于 2012-08-17T03:05:47.493 に答える