簡體   English   中英

從整個引用數字列表中減去 11

[英]Subtract 11 from entire list of quoted numbers

我需要從列表中每個引用的數字中減去 11。 除了這里,我到處尋找有關此主題的幫助。

這是代碼:

list1 = [ 1, '33', 2, '49', 3, '63']

print(list1-11)

這是使用isinstance檢查類型和列表理解的一種方法。

前任:

lst = [ 1, '33', 2, '49', 3, '63']
print([int(i) - 11 if isinstance(i, str) else i for i in lst])

Output:

[1, 22, 2, 38, 3, 52]

您需要使用int()將這些字符串值轉換為 int ,以便您可以向其中添加 integer 。

只需使用

print([int(i) - 11 for i in list])

TL;DR [int(x) - 11 for x in list1]

第一個減法不是在列表上定義的運算符。 例如,它是為 numpy arrays 定義的,其中僅使用*數字。 python 中的列表可能包含任何內容,那么減法應該怎么做? 有人可能會說它應該創建一個沒有元素11或至少第一次出現的新列表。 在任何情況下,實際上您的代碼只會因為告訴您列表不知道減去意味着什么而失敗。

減法也沒有在字符串上定義,即你不能指望'33' - 11返回22 也許在 JavaScript 中可以,但在 Python 中不行。 Python 不會嘗試將您給它的任何類型的 object 轉換為另一種類型,以便它可以應用某些運算符或方法。 它寧願失敗並告訴您:如果您希望我將此 object 轉換為int ,您應該告訴我。

因此,我們使用int()將列表中的所有對象包裝起來,它試圖將任何 object 可以轉換為int 對於像 sockets 這樣的隨機對象以及其中包含非法字符的字符串(例如,你知道的,字母),這將失敗。

一旦我們有了一個int對象的列表,我們就可以愉快地從它們中減去另一個int ,在這種特殊情況下是11 使用 Python 的列表理解,我們可以將這兩個步驟結合起來,因為我們要做的基本上是將列表中的每個元素 map 轉換為其他內容。

如果 OP 在減去 11 后想要字符串中的 output 有其他答案。我們可以制作 function 以使其可讀,map 就像這樣

list1 = [ 1, '33', 2, '49', 3, '63']
def sub11(item):
        if isinstance(item,str):
             return str(int(item) - 11)
        else:
             return item
list(map(sub11,list1))

Output

[1, '22', 2, '38', 3, '52']

暫無
暫無

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

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