方法1
:使用
List Comprehension
和
isdigit()
方法2
:使用
[`List Comprehension`](https://blog.finxter.com/list-comprehension/)
和
join()
方法3
:使用
Regex
方法
4
:使用一个
For
循环
奖励
:提取正数或负数
在每个代码片断的顶部添加以下代码。这个代码段将使本文中的代码运行无误。
import re
方法1:使用List Comprehension和isdigit()。
你可以使用 List Comprehension和 isdigit()来提取、转换和返回一个在字符串中找到的正数 列表 txt ,使用表达式[int(s) for s in txt.split() if s.isdigit()] ,返回一个整数列表。
这里有一个例子。
txt = "One can't hold 2 watermelons in 1 hand: by Driton Selmani, 2012"
nums = [int(s) for s in txt.split() if s.isdigit()]
print(nums)
这段代码创建了持有上述谚语的变量txt 。
接下来。 List Comprehension对每个字符串元素进行评估。如果该元素包含一个数字,这个元素就被提取出来 (txt.split()),转换为一个整数 (int(s)),并附加到nums 。一旦所有元素都被评估,nums 的内容就会被输出到终端。
输出 - 一个整数的列表
方法2:使用List Comprehension和join()
另一种Pythonic方法是使用三元表达式。 List Comprehension和 join()来提取、转换并返回一个在字符串中发现的正数 列表。这个方法返回一个整数的列表。
txt = "One can't hold 2 watermelons in 1 hand: by Driton Selmani, 2012"
tmp = ''.join(c if c in '0123456789' else ' ' for ch in txt)
nums = [int(i) for i in tmp.split()]
print(nums)
这段代码创建了变量txt ,该变量保存了上面提到的谚语。
下一步。 join()(一个可迭代的)评估每个字符串元素。
如果在子串('0123456789')中发现了一个元素,那么这个元素就会原封不动地连接到tmp 。
如果没有,该元素将被替换为空格(' ')字符并连接到tmp 。
如果此时将tmp 的内容输出到终端,它将显示如下,所有其他非数字元素被转换为空格。
然后。 List Comprehension被用来浏览tmp 的内容,将每个元素转换为整数(int()),并将其追加到nums (有效地去除空格)。
nums 的内容被作为一个整数列表输出到终端。
输出 - 一个整数的列表
另外,你可能想回顾一下三元运算符的基本知识,因为它被用在上述代码片断的第一行突出显示的地方。
方法3:使用Regex
在这个例子中。 Regex是用来从一个字符串中提取所有的正数。这个方法返回一个字符串的列表。
txt = "One can't hold 2 watermelons in 1 hand: by Driton Selmani, 2012"
nums = re.findall(r'\b\d+\b', txt)
print(nums)
Finxter的最爱!
这段代码创建了持有上述谚语的变量txt 。
接下来,一个regex ([re.findall()](https://blog.finxter.com/python-regex/))被用来创建并从作为参数传递的字符串中提取所有正数。
简而言之,\d+ 符号让 Regex知道搜索字符串中所有出现的一(1)个或更多的数字并提取它们。提取的结果以字符串列表的形式保存在nums中。
输出 - 一个字符串的列表
方法4:使用For Loop
这个例子使用一个 For循环遍历字符串元素,检查是否存在一个正数(c.isdigit())。如果发现,它将被转换为一个整数并追加到nums中。这个方法返回一个整数的列表。
txt = "One can't hold 2 watermelons in 1 hand: by Driton Selmani, 2012"
nums = []
for c in txt.split():
if c.isdigit():
nums.append(int(c))
print(nums)
这段代码创建了变量txt ,该变量保存了上面所示的谚语。和nums ,该列表将包含在字符串中发现的所有数字。
接下来,一个 For循环被实例化以遍历每个字符串元素,检查是否存在一个数字。如果发现,该元素被转换为一个整数(int(c)),并附加到nums 。
这个提取的结果保存在nums中,作为一个整数的列表。
输出 - 一个整数的列表
奖励:提取正数或负数
如果你需要提取负数和正数会怎样?上面的例子不会给你你需要的结果。但是,使用regex.compile() 和regex.findall() 就可以了!
txt = "The 3rd equation resulted in -745.093."
regex = re.compile(r'[\+\-]?[0-9]+')
nums = [int(k) for k in regex.findall(txt)]
print(nums)
这段代码创建了一个字符串,txt ,包含一个正数和负数。
接下来,该 re.compile() 方法被调用。该方法从传递的模式中返回一个正则表达式对象。在这种情况下,我们已经告诉该方法提取所有的负数或正数([+-]?[0-9]+)。
这个对象保存到regex 。
一个列表理解器被用来循环搜索任何正数或负数的出现,将它们转换为整数(int(k) ),并追加到nums 。这个提取的结果作为一个整数列表保存到nums。
输出 - 一个整数的列表