在re.findall中使用any - Python

时间:2012-08-17 02:52:59

标签: python regex list variables numbers

我在python中写了一个脚本来告诉新的前10个数字中的新数字。我知道它看起来比它更复杂,这与我稍后尝试用脚本做的事情有关。就目前而言,虽然我试图找出它为什么要打印每个'对于列表中的每个数字' new'而不仅仅是十分之前的那些。

这是我的代码:

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

3 个答案:

答案 0 :(得分: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可以自行运行。

答案 1 :(得分:0)

你需要在你的生成器表达式中以某种方式引用x,否则你只是检查any([each, each, each, ....]),如果每个计算结果为true(它将始终用于正则表达式),它将始终求值为true。我怀疑你想要这样的东西,它测试第一个i项中的任何一个是否等于每个:

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

答案 2 :(得分: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