打印语句中的Python生成器

时间:2019-03-10 14:56:06

标签: python-3.x

我尝试使用一些简单的代码将数字与字符串分开:

d=['72olle' ,'103doo', '100ya']

def only_digit (data):
    return ''.join(filter(lambda x: x.isdigit(),(i for i in data)))

for i in d:
    print(only_digit(i))

print(only_digit(i for i in d))

无法得知为什么第一次打印有效但第二次打印无效

2 个答案:

答案 0 :(得分:0)

您可以使用这种不同的方法执行相同的操作,而且我认为更容易理解。使用findall()模块中的re函数:

import re

d=['72olle' ,'103doo', '100ya']
print([re.findall(r'\d+', i)[0] for i in d])

输出:

  

['72', '103', '100']

参考文献:Python: Extract number from a string

答案 1 :(得分:0)

这应该为您提供有关传递给only_digit函数的内容以及返回的内容的一些信息。

d=['72olle' ,'103doo', '100ya']

def only_digit (data):
    print(type(data)," => ",data)
    theReturn = ''.join(filter(lambda x: x.isdigit(),(i for i in data)))
    print(type(theReturn)," => ",theReturn)
    return theReturn

for i in d:
    print(only_digit(i))

print(only_digit(i for i in d))

输出:

>>> for i in d:
...     print(only_digit(i))
...
<type 'str'>  => ' 72olle '
<type 'str'>  => ' 72 '
72
<type 'str'>  => ' 103doo '
<type 'str'>  => ' 103 '
103
<type 'str'>  => ' 100ya '
<type 'str'>  => ' 100 '
100
>>> print(only_digit(i for i in d))
<type 'generator'>  => ' <generator object <genexpr> at 0x0000000001F764C8> '
<type 'str'>  => '  '