繁体   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