簡體   English   中英

從列表中僅提取整數(而不是浮點數)

[英]Extract only the integers from list (not the floats)

我遇到以下問題:

我有一個字符串,其中包含整數和浮點數。 我無法僅提取整數(不是浮點數!)。

我有(它是一個字符串):

f=  "0:6.0 3:5.6 54:12.3 56:12.0"

結果應如何(不是字符串形式):

0,3,54,56

我在Google上搜索(並且出現了堆棧溢出),從而得出了以下解決方案:

[int(s) for s in f.split() if s.isdigit()]

這導致一個空列表。

其他解決方案如:

int(re.search(r'\d+', f).group())

導致“ 0整數”。 抱歉,我是新手,但我真的無法解決此問題。

您可以使用.partition(':')

>>> s="0:6.0 3:5.6 54:12.3 56:12.0"
>>> [e.partition(':')[0] for e in s.split()]
['0', '3', '54', '56']

然后在這些字符串上調用int

>>> [int(e.partition(':')[0]) for e in s.split()]
[0, 3, 54, 56]

要么,

>>> map(int, (e.partition(':')[0] for e in s.split()))
[0, 3, 54, 56]

您可以使用相同的方法(稍有變化)來獲取浮點數:

>>> map(float, (e.partition(':')[2] for e in s.split()))
[6.0, 5.6, 12.3, 12.0]

在評論中問的公平問題: 為什么要使用分區? 您可以使用int(split(“:”)[0])

  1. 使用.partition ,所有讀者(包括您將來的自己)都可以清楚地看到,您只看1個拆分。 (當然,您可以使用split(delimiter, maxsplit)的2個參數形式,但我認為對於單個split來說不太清楚...)
  2. 測試成功分區很容易,因為partition 總是生成一個三元素元組,而您只需測試元素tuple[1]的真實性即可。
  3. 您可以在形式為lh,delimiter,rh=string.partion('delimiter')元組分配中安全地使用.partion ,其中lh, rh=string.split('delimiter')如果找不到分隔符,則lh, rh=string.split('delimiter')會產生ValueError
  4. 與包括在所產生的元組中的分隔符,它更容易重組原始字符串''.join(tuple_from_partion) VS split由於在分隔符split丟失。
  5. 為什么不?

如何使用以下正則表達式:

import re

f =  "0:6.0 3:5.6 54:12.3 56:12.0"
answer = [int(x) for x in re.findall(r'\d{1,2}(?=:)', f)]
print(answer)

產量

[0, 3, 54, 56]

您也可以使用map而不是列表理解來實現相同的結果(如@dawg的答案):

answer = map(int, re.findall(r'\d{1,2}(?=:)', f))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM