List of all unique characters in a string?

后端 未结 7 1520
再見小時候
再見小時候 2020-11-27 18:03

I want to append characters to a string, but want to make sure all the letters in the final list are unique.

Example: \"aaabcabccd\"

相关标签:
7条回答
  • 2020-11-27 18:15
    char_seen = []
    for char in string:
        if char not in char_seen:
            char_seen.append(char)
    print(''.join(char_seen))
    

    This will preserve the order in which alphabets are coming,

    output will be

    abcd
    
    0 讨论(0)
  • 2020-11-27 18:17

    Store Unique characters in list

    Method 1:

    uniue_char = list(set('aaabcabccd'))
    #['a', 'b', 'c', 'd']
    

    Method 2: By Loop ( Complex )

    uniue_char = []
    for c in 'aaabcabccd':
        if not c in uniue_char:
            uniue_char.append(c)
    print(uniue_char)
    #['a', 'b', 'c', 'd']
    
    0 讨论(0)
  • 2020-11-27 18:18

    For completeness sake, here's another recipe that sorts the letters as a byproduct of the way it works:

    >>> from itertools import groupby
    >>> ''.join(k for k, g in groupby(sorted("aaabcabccd")))
    'abcd'
    
    0 讨论(0)
  • 2020-11-27 18:19

    I have an idea. Why not use the ascii_lowercase constant?

    For example, running the following code:

    # string module, contains constant ascii_lowercase which is all the lowercase
    # letters of the English alphabet
    import string
    # Example value of s, a string
    s = 'aaabcabccd'
    # Result variable to store the resulting string
    result = ''
    # Goes through each letter in the alphabet and checks how many times it appears.
    # If a letter appears at least oce, then it is added to the result variable
    for letter in string.ascii_letters:
        if s.count(letter) >= 1:
            result+=letter
    
    # Optional three lines to convert result variable to a list for sorting
    # and then back to a string
    result = list(result)
    result.sort()
    result = ''.join(result)
    
    print(result)
    

    Will print 'abcd'

    There you go, all duplicates removed and optionally sorted

    0 讨论(0)
  • 2020-11-27 18:21

    if the result does not need to be order-preserving, then you can simply use a set

    >>> ''.join(set( "aaabcabccd"))
    'acbd'
    >>>
    
    0 讨论(0)
  • 2020-11-27 18:31

    Use an OrderedDict. This will ensure that the order is preserved

    >>> ''.join(OrderedDict.fromkeys( "aaabcabccd").keys())
    'abcd'
    

    PS: I just timed both the OrderedDict and Set solution, and the later is faster. If order does not matter, set should be the natural solution, if Order Matter;s this is how you should do.

    >>> from timeit import Timer
    >>> t1 = Timer(stmt=stmt1, setup="from __main__ import data, OrderedDict")
    >>> t2 = Timer(stmt=stmt2, setup="from __main__ import data")
    >>> t1.timeit(number=1000)
    1.2893918431815337
    >>> t2.timeit(number=1000)
    0.0632140599081196
    
    0 讨论(0)
提交回复
热议问题