簡體   English   中英

如何將列表映射到整數

[英]How to map a list to integers

我有一個連接字符串,並用逗號連接。 我需要將此列表拆分為一個列表,但是列表的類型必須嚴格由整數組成。

doc[column] = map(int, [v for v in value.split(',') if v and len(v)])

ValueError:以10為底的int()的無效文字:''

我認為添加if v ,然后添加len(v)可以解決問題。 我應該怎么做?

您需要檢查字符串僅是數字。 您可以使用str.isdigit

doc[column] = [int(v) for v in value.split(',') if v.strip().isdigit()]

注意:上面將不接受負整數。 要處理它,您需要更多條件。

更新

更新了答案以處理' 1'例:

>>> int(' 1')
1
>>> ' 1'.isdigit()
False
>>> ' 1'.strip().isdigit()
True

根據OP的評論更新

為了完整起見,您需要嘗試float / int以查看該值是否可轉換為類型。

例:

def try_float(x):
    try:
        float(x)
        return True
    except (TypeError, ValueError):
        return False

value = '1, 2.3, 4, 5, blah, 6.78'
numbers = [float(x) for x in value.split(',') if try_float(x)]

制作一個命名精美的函數:

def converts_to_int(value):
    try:
        int(value)
        return True
    except ValueError:
        return False

使用列表理解比使用map短:

doc[column] = [int(v) for v in value.split(',') if converts_to_int(v)]

暫無
暫無

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

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