几乎我需要编写一个程序来检查列表是否有任何重复项,如果有,它会删除它们并返回一个新列表,其中包含未复制/删除的项目.这就是我所拥有的,但说实话,我不知道该怎么做.
def remove_duplicates():
t = ['a', 'b', 'c', 'd']
t2 = ['a', 'c', 'd']
for t in t2:
t.append(t.remove())
return t
Run Code Online (Sandbox Code Playgroud) 字典在Python 3.6中排序(至少在CPython实现下),与之前的版本不同.这似乎是一个重大变化,但它只是文档中的一小段.它被描述为CPython实现细节而不是语言特性,但也暗示这可能成为未来的标准.
在保留元素顺序的同时,新字典实现如何比旧字典实现更好?
以下是文档中的文字:
dict()现在使用PyPy开创的"紧凑"表示.与Python 3.5相比,新dict()的内存使用量减少了20%到25%.PEP 468(在函数中保留**kwargs的顺序.)由此实现.这个新实现的顺序保留方面被认为是一个实现细节,不应该依赖(这可能会在未来发生变化,但是在更改语言规范之前,希望在几种版本的语言中使用这个新的dict实现为所有当前和未来的Python实现强制命令保留语义;这也有助于保持与随机迭代顺序仍然有效的语言的旧版本的向后兼容性,例如Python 3.5).(由INADA Naoki在issue 27350中提供.最初由Raymond Hettinger提出的想法.)
2017年12月更新:Python 3.7 保证了dict保留插入顺序
我试过搜索互联网,但找不到哈希的含义.
当他们说对象是什么hashable或hashable objects它是什么意思?
最近我注意到,当我转换list到set元素的顺序发生变化,由字符排序.
考虑这个例子:
x=[1,2,20,6,210]
print x
# [1, 2, 20, 6, 210] # the order is same as initial order
set(x)
# set([1, 2, 20, 210, 6]) # in the set(x) output order is sorted
Run Code Online (Sandbox Code Playgroud)
我的问题是 -
我最近惊讶地发现,虽然 dicts 保证在 Python 3.7+ 中保留插入顺序,但集合不是:
>>> d = {'a': 1, 'b': 2, 'c': 3}
>>> d
{'a': 1, 'b': 2, 'c': 3}
>>> d['d'] = 4
>>> d
{'a': 1, 'b': 2, 'c': 3, 'd': 4}
Run Code Online (Sandbox Code Playgroud)
>>> s = {'a', 'b', 'c'}
>>> s
{'b', 'a', 'c'}
>>> s.add('d')
>>> s
{'d', 'b', 'a', 'c'}
Run Code Online (Sandbox Code Playgroud)
这种差异的基本原理是什么?导致 Python 团队更改 dict 实现的相同效率改进也不适用于集合吗?
我不是在寻找指向有序集实现的指针或使用 dicts 作为集合的替代品的方法。我只是想知道为什么 Python 团队没有在他们为 dicts 这样做的同时使内置集保留顺序。
如何在不对结果进行排序的情况下使用numpy unique,只是按序列中出现的顺序排序?像这样的东西?
a = [4,2,1,3,1,2,3,4]
np.unique(a) = [4,2,1,3]
而不是
np.unique(a) = [1,2,3,4]
使用天真的解决方案应该可以编写一个简单的函数.但是,由于我需要多次这样做,有没有快速和简洁的方法来做到这一点?
我有一节课:
class Car:
make
model
year
Run Code Online (Sandbox Code Playgroud)
我有一个汽车列表,想要获得我的汽车中的独特车型列表.
该列表可能是成千上万的项目.最好的方法是什么?
谢谢.
假设我有一个包含随机数的巨大列表,例如
L = [random.randrange(0,25000000000) for _ in range(1000000000)]
Run Code Online (Sandbox Code Playgroud)
我需要删除此列表中的重复项
我为包含较少元素的列表编写了此代码
def remove_duplicates(list_to_deduplicate):
seen = set()
result=[]
for i in list_to_deduplicate:
if i not in seen:
result.append(i)
seen.add(i)
return result
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,我创建了一个集合,这样我就可以记住哪些数字已经出现在我正在处理的列表中,如果该数字不在集合中,那么我将它添加到我需要返回的结果列表中并将其保存在设置以便它不会再次添加到结果列表中
现在,对于列表中的 1000000 个数字,一切都很好,我可以快速得到结果,但对于比 1000000000 个问题出现的数字,我需要使用机器上的不同内核来尝试解决问题,然后将多个结果结合起来流程
我的第一个猜测是让所有进程都可以访问一个集合,但会出现许多复杂情况一个进程如何读取而另一个进程正在添加到集合中,我什至不知道是否可以在我知道的进程之间共享一个集合我们可以使用队列或管道,但我不确定如何使用它
有人可以就解决这个问题的最佳方法给我建议吗?我对任何新想法持开放态度
python optimization duplicates multiprocessing python-multiprocessing
例如,我有这个数字/id 列表:
[1001, 1002, 1002, 1003, 1004]
我如何合并或使 1002 只有一个?所以它会是这样的:
[1001, 1002,1003, 1004]
我知道这是非常基本的,我一直在 Google 中寻找解决方案有一段时间了,我所看到的只是如何合并dicts,这不是我需要的。我只需要合并这些相同的值。
python ×10
set ×3
duplicates ×2
list ×2
algorithm ×1
cpython ×1
dictionary ×1
intersection ×1
numpy ×1
optimization ×1
python-3.6 ×1
python-3.x ×1