[英]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.