添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
  • 方法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 Comprehensionisdigit()来提取、转换和返回一个在字符串中找到的正数 列表 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, 1, 2012]

    方法2:使用List Comprehension和join()

    另一种Pythonic方法是使用三元表达式List Comprehensionjoin()来提取、转换并返回一个在字符串中发现的正数 列表。这个方法返回一个整数的列表

    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 的内容输出到终端,它将显示如下,所有其他非数字元素被转换为空格。

    2 1 2012

    然后。 List Comprehension被用来浏览tmp 的内容,将每个元素转换为整数(int()),并将其追加到nums (有效地去除空格)。

    nums 的内容被作为一个整数列表输出到终端。

    输出 - 一个整数的列表

    [2, 1, 2012]

    另外,你可能想回顾一下三元运算符的基本知识,因为它被用在上述代码片断的第一行突出显示的地方。

    方法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中。

    输出 - 一个字符串的列表

    ['2', '1', '2012']

    方法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中,作为一个整数的列表

    输出 - 一个整数的列表

    [2, 1, 2012]

    奖励:提取正数或负数

    如果你需要提取负数正数会怎样?上面的例子不会给你你需要的结果。但是,使用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。

    输出 - 一个整数的列表

    [3, -745, 93]

    分类:
    人工智能
    标签: