-2

我在 python 中编写了一个脚本来告诉 new 中的哪些数字在 new 的前 10 个数字中。我知道它看起来比它更复杂,这与我稍后尝试对脚本执行的操作有关。现在,虽然我试图弄清楚为什么它为“新”列表中的每个数字打印“每个”,而不仅仅是第十个之前的数字。

这是我的代码:

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

如果您要查找 中的前 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 )。我怀疑你想要这样的东西,它测试前 i 项中的任何一项是否等于每个:

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

于 2012-08-17T03:05:47.493 回答
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 回答