[英]Convert List of strings to ints without removing 0
所以我有一個字符串列表,我想將其轉換為整數列表
['030','031','031','031','030','031','031','032','031','032'
我應該如何處理,以便新列表不會刪除零
我想要這樣:
[030, 031, 031, 031, 030, 031, 031, 032, 031, 032]
不是這個:
[30, 31, 31, 31, 30, 31, 31, 32, 31, 32]
謝謝
您只需使用數字即可完成此操作,而無需隱秘
>>> def f(rgb, bw):
... return [x // 10 * 10 + bw * 10 ** i // 100 % 10 for i, x in enumerate(rgb)]
...
>>> f((233, 199, 016), 31)
[230, 193, 11]
這是使用字符串的版本
>>> def f(rgb, bw):
... return [s[:2] + c for s, c in zip(rgb, bw)]
...
>>> f(("233", "199", "016"), "031")
['230', '193', '011']
int("030")
的值與int("30")
的值相同。 當我們談論數字時,前導0
沒有語義值-如果要保留該前導0
,則不再存儲數字,而是存儲數字,因此它必須是字符串。
如果需要同時使用兩種方法,則解決方案是將其以最常用的形式存儲,然后根據需要進行轉換。 如果您最需要前導零(即需要它作為字符串),則只需保持其原樣,然后根據需要在值上調用int()
。
如果相反,則可以使用字符串格式將數字填充為所需的數字位數:
>>> "{0:03d}".format(30)
'030'
如果零填充不一致(也就是說,不可能從int
恢復格式),那么最好將其保留為兩種形式:
>>> [(value, int(value)) for value in values]
[('030', 30), ('031', 31), ('031', 31), ('031', 31), ('030', 30), ('031', 31), ('031', 31), ('032', 32), ('031', 31), ('032', 32)]
最佳方法完全取決於情況。
編輯:對於您的特定情況,如注釋中所示,您需要這樣的內容:
>>> current = ("233", "199", "016")
>>> modifier = "031"
>>> ["".join(part) for part in zip(*list(zip(*current))[:-1] + [modifier])]
['230', '193', '011']
要對此進行分解,您需要用修飾符中的相關數字替換每個數字的第三位。 這是通過使用zip()
在數字列中完成的-list list(zip(*current))
給我們[('2', '1', '0'), ('3', '9', '1'), ('3', '9', '6')]
-然后,我們將最后一列替換為修改后的列,並再次使用zip()
再次為我們提供行。 然后,我們將各個數字重新組合成字符串。
請注意,在2.x中, zip()
提供了一個列表,因此您無需將調用包裝在list()
。 在3.x中,您將獲得一個生成器。
您可以這樣做:
class MyNum(int):
def __init__(self,s):
self=int(s)
def __str__(self):
return '{:03d}'.format(self)
def __repr__(self):
return '{:03d}'.format(self)
li=[MyNum(i) for i in ('030','031','032')]
n=li[0]
print li,n*2,n/3.5
印刷品:
[030, 031, 032] 60 8.57142857143
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.