2012-08-17 44 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