[英]Assign a unique 4 digit number to a list of ids using python
我有一個 ID 列表,我想為每個 ID 提供一個 4 位數的唯一編號。
例如 :
driver id = ['5c73d1238472750067e86c6d','5a0d5513494c09001491c118']
unique id = ['1234' , '5897']
有我可以使用的包嗎?
您可以像這樣使用字符串對象的 zfill 函數
ids = [1, 2, 3, 4]
list(map(lambda x: str(x).zfill(4), ids))
並將導致:
['0001', '0002', '0003', '0004']
import random
import string
def get_id():
return ''.join(random.choice(string.digits) for n in range(4))
driver_id = [1, 2, 3, 4]
unique_id=[]
while len(unique_id)!=len(driver_id):
id = get_id()
if id not in unique_id:
unique_id.append(id)
print(unique_id)
輸出:
['7518', '7806', '4654', '0677']
大多數答案都是關於如何生成它們的,假設使用 4 位數字作為string
。 讓我們檢查問題並提出設計、約束和管理它們。
如果您使用數字作為數字,而不是字符串,那么以非零開頭的非零數字是 1000 到 9999,您只能處理 8999 個元素(在您的情況下是驅動程序)。 -約束
示例:如果您將0123視為數字實際上是 3 位數字,則123 。
設計:
使用range(1000,10000)
在 for 循環中生成數字並將它們保存在列表中(下面的代碼):復雜性:是常數 O(c),只發生一次。
>>>
>>> four_digit_pool = []
>>> for i in range(1000, 10000):
... four_digit_pool.append(i)
...
>>>
four_digit_pool = [1000, 1001, ..., 9999]
當遇到一個元素時,查找key是否存在並將其添加到driver_id_map。
將其添加到列表(ID 池)中的 map 和 pop 元素。 不要使用remove,使用pop,pop總是O(1)。 注意:在這種情況下,remove 也是 O(1),因為它是已排序的,並且您是從左邊一一刪除。 但是可以肯定地使用流行音樂。
driver_id_map = {
1000 : '5c73d1238472750067e86c6d'
1001 : '5a0d5513494c09001491c118'
...
}
如果您想查找驅動程序是否已在列表中,您也可以將上面的地圖反轉。
driver_id_map = {
'5c73d1238472750067e86c6d' : 1000
'5a0d5513494c09001491c118' : 1001
...
}
地圖的查找是O(1) 。
如果您遍歷所有驅動程序並分配它,則復雜度為 O(N)
注意:如果您使用數字作為字符串並考慮以零開頭的非零數字是 1108 個數字。 您可以獲得額外的約 1000 多個驅動程序。
這些數字也會進入four_digit_pool。 復雜性不會有太大變化。
以 0 - 999 種可能性開頭的數字,例如:0123
以 00 開頭的數字 - 99 種可能性,例如:0023
以 000 開頭的數字 - 9 種可能性,例如:0003
以 0000 開頭的數字 - 1 種可能性,例如:0000(唯一的)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.