簡體   English   中英

使用 python 為 id 列表分配一個唯一的 4 位數字

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

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