python - python中是否有等同于非唯一集的数据结构?

标签 python set tuples

我有一个非常大的整数列表列表,我想对其进行“hash()”以提高搜索速度。每个嵌套列表的结果散列值需要独立于整数的顺序,并且仅依赖于列表中的值。这建议将(卡住的)集合作为适合散列的数据结构。但是,我需要保留每个整数值,无论是否重复,这是集合的一个障碍。

所以,这让我对列表进行排序,转换为元组和散列,这非常慢,我想有更好的策略。

对于如何更有效地执行此操作的任何建议,我将不胜感激。

最佳答案

字典是散列。

>>> def bag_random(d, n):
...     x = random.randint(0, n)
...     if x in d:
...             d[x] += 1
...     else:
...             d[x] = 1
... 
>>> a = {}
>>> for i in xrange(10**6):
...     bag_random(a, 100)
... 
>>> a
{0: 9856, 1: 9787, 2: 9944, 3: 9822, 4: 9978, 5: 9915, 6: 9915, 7: 9860, 8: 9926, 9: 9756, 10: 9914, 11: 10030, 12: 10009, 13: 9803, 14: 9918, 15: 10136, 16: 9818, 17: 9868, 18: 9893, 19: 9971, 20: 9998, 21: 9982, 22: 9884, 23: 9806, 24: 9998, 25: 9926, 26: 9977, 27: 10011, 28: 10030, 29: 9899, 30: 9808, 31: 9825, 32: 9980, 33: 9812, 34: 9928, 35: 9827, 36: 9934, 37: 9883, 38: 9913, 39: 9893, 40: 9822, 41: 9714, 42: 9871, 43: 9954, 44: 9989, 45: 9694, 46: 9878, 47: 9984, 48: 9893, 49: 9928, 50: 10093, 51: 9881, 52: 9828, 53: 9660, 54: 9884, 55: 9745, 56: 10048, 57: 9845, 58: 9916, 59: 9933, 60: 9944, 61: 9979, 62: 9992, 63: 9635, 64: 9811, 65: 9900, 66: 9950, 67: 9744, 68: 9829, 69: 10037, 70: 9929, 71: 9811, 72: 9830, 73: 10056, 74: 9957, 75: 9992, 76: 9777, 77: 9942, 78: 9809, 79: 9734, 80: 9855, 81: 10021, 82: 9914, 83: 10009, 84: 10018, 85: 9961, 86: 10036, 87: 9849, 88: 9951, 89: 9770, 90: 9795, 91: 9899, 92: 9975, 93: 9935, 94: 10037, 95: 9992, 96: 9868, 97: 10014, 98: 9689, 99: 9883, 100: 9878}

在速度不是特别快的桌面上花了大约一秒钟。

关于python - python中是否有等同于非唯一集的数据结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5686475/

相关文章:

python - 无法在 macOS 上启动 localstack

python - 根据没有 isin() 的其他 df 的列过滤数据框

python - 此 numpy 数组索引的较短版本

python - 有 Django ListView 模型排序吗?

javascript - 从对象日期数组中分离出月份,并根据日期对应的月份进行分类

java - 如何重新设计方法以使其发挥作用

python - 获取所有可能的长度为 n 的二进制元组的列表

c++ - std::set 方法获取低于给定元素的元素数量?

python - super 在子类化 tuple() 时给出错误的类型

python - 使用 NumPy 查找元组列表第二个元素的中位数