V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
GJXxiaoBai
V2EX  ›  Python

Python 列表去重怎么用暴力枚举法写出

  •  
  •   GJXxiaoBai · 2018-08-30 00:19:06 +08:00 · 3587 次点击
    这是一个创建于 2312 天前的主题,其中的信息可能已经有所发展或是发生改变。
    希望各位大佬能提供代码,需求是时间复杂度最小
    19 条回复    2018-09-03 17:55:00 +08:00
    swulling
        1
    swulling  
       2018-08-30 00:24:44 +08:00 via iPhone   ❤️ 2
    set(x)
    OpenJerry
        2
    OpenJerry  
       2018-08-30 00:26:22 +08:00 via Android
    一楼正解,此贴终结
    ITisCool
        3
    ITisCool  
       2018-08-30 00:28:53 +08:00 via iPhone
    list(set(x))
    kumfo
        4
    kumfo  
       2018-08-30 00:29:12 +08:00
    赞同二楼说的一楼正解,此贴终结。
    Alerta
        5
    Alerta  
       2018-08-30 00:48:44 +08:00 via iPhone
    赞同三楼说的赞同二楼说的一楼正解,此贴终结。
    conn4575
        6
    conn4575  
       2018-08-30 06:59:19 +08:00 via Android
    如果要求保持顺序,list({i:None for i in x}.keys())
    conn4575
        7
    conn4575  
       2018-08-30 06:59:43 +08:00 via Android
    忘记说了,python3
    0xABCD
        8
    0xABCD  
       2018-08-30 08:15:37 +08:00 via Android
    @conn4575 python3.5 也是无序的,3.6 是有序的,但是不要依赖这一实现
    ericls
        9
    ericls  
       2018-08-30 08:47:29 +08:00 via iPhone
    @conn4575 3.6 以上 保证顺序
    ericls
        10
    ericls  
       2018-08-30 08:47:44 +08:00 via iPhone
    @0xABCD 3.6 以上的 cpython 保证顺序
    so1n
        11
    so1n  
       2018-08-30 10:06:57 +08:00
    @ericls 请问你们是指 3.6 的 set()有序还算 list(set())有序?
    exhades
        12
    exhades  
       2018-08-30 10:08:31 +08:00 via Android
    set 就够了
    xinhangliu
        13
    xinhangliu  
       2018-08-30 10:53:39 +08:00 via Android
    @so1n 指的是 Dict
    reself
        14
    reself  
       2018-08-30 13:00:47 +08:00 via Android
    @conn4575 这里不能保持有序吧,生成 dict 时失序了,再调用 keys 仍然无序
    so1n
        15
    so1n  
       2018-08-30 13:02:55 +08:00
    @xinhangliu 3.6 的 dict 变成有序的吗
    ghhardy
        16
    ghhardy  
       2018-08-30 13:45:07 +08:00   ❤️ 1
    楼主是否看过 python cookbook ?

    If the values in the sequence are hashable, the problem can be easily solved using a set and a generator. For example:

    def dedupe(items):
    seen = set()
    for item in items:
    if item not in seen:
    yield item seen.add(item)

    Here is an example of how to use your function:
    >>> a = [1, 5, 2, 1, 9, 1, 5, 10]
    >>> list(dedupe(a))
    [1, 5, 2, 9, 10]
    >>>

    This only works if the items in the sequence are hashable. If you are trying to eliminate duplicates in a sequence of unhashable types (such as dicts), you can make a slight change to this recipe, as follows:

    def dedupe(items, key=None):
    seen = set()
    for item in items:
    val = item if key is None else key(item)
    if val not in seen:
    yield item
    seen.add(val)

    Here, the purpose of the key argument is to specify a function that converts sequence items into a hashable type for the purposes of duplicate detection. Here ’ s how it works:
    >>> a = [ {'x':1, 'y':2}, {'x':1, 'y':3}, {'x':1, 'y':2}, {'x':2, 'y':4}]
    >>> list(dedupe(a, key=lambda d: (d['x'],d['y'])))
    [{'x': 1, 'y': 2}, {'x': 1, 'y': 3}, {'x': 2, 'y': 4}]
    >>> list(dedupe(a, key=lambda d: d['x']))
    [{'x': 1, 'y': 2}, {'x': 2, 'y': 4}]
    >>>
    This latter solution also works nicely if you want to eliminate duplicates based on the value of a single field or attribute or a larger data structure.
    huangke
        17
    huangke  
       2018-09-01 16:07:34 +08:00
    res = []
    lists = = [res.append(i) for i in target if i not in res]
    wersonliu9527
        18
    wersonliu9527  
       2018-09-03 09:59:50 +08:00
    我忘了在哪看过的一个以前没见过的操作,去重保留顺序
    ccc = [1, 3, 5, 8, 9, 3, 5, 9, 10]
    res = sorted(set(ccc), key=ccc.index)
    print res
    =>[1, 3, 5, 8, 9, 10]
    thautwarm
        19
    thautwarm  
       2018-09-03 17:55:00 +08:00
    python sorteddict 的实现已经默认了,原因是这个涉及到 dataclass 和 NamedTuple 的实现。
    可以依赖 sorted dict 了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2034 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 00:28 · PVG 08:28 · LAX 16:28 · JFK 19:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.