2012-08-17 29 views
-2

我在python中編寫了一個腳本來告訴哪些數字在新的前10個數字中。我知道它看起來比它更復雜,這與我後來想用腳本做什麼有關。現在雖然我試圖弄清楚爲什麼它會在「新」列表中爲每個數字打印「each」,而不是在第十個之前打印每個數字。使用re.findall中的任何一個 - Python

這裏是我的代碼:

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 
+1

這引發TypeError,因爲new是一個列表。你使用的是什麼版本的Python? – 2012-08-17 02:55:40

+0

你能更清楚地解釋你想做什麼,可能包括一個'num'變量的實例嗎? – 2012-08-17 03:09:39

回答

0

您需要以某種方式在您的生成器表達式中引用x,否則您只需檢查any([each, each, each, ....]),如果每個值都爲真(它總是用於正則表達式),則該值總是等於true。我懷疑你想這樣的事情,在此進行測試,如果任何第i個項目是相等的:

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

0

如果你在new尋找第10個字母,你的意思是

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可以正常工作。

0

如果新的字符串,其中有一些是像「123」號的列表,並你想這些數字的第一個10:

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

(對於Python 2.x的)

如果新是一個字符串,你必須

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 
+0

我想你的意思是打印號碼而不是打印x在最後一行 – shantanuo 2012-08-17 06:44:53

+0

的確我是。固定。 – 2012-08-17 08:32:42