How to remove specific element from sets inside a list using list comprehension

后端 未结 4 1774
天涯浪人
天涯浪人 2021-02-05 03:38

I think this may be related to set being mutable.

Basically, I can remove an element from a set using set.discard(element). However, set.d

相关标签:
4条回答
  • 2021-02-05 04:03

    You can use set difference operator, like this

    test, empty = [{'', 'a'}, {'b', ''}], {''}
    print [x - empty for x in test]
    # [set(['a']), set(['b'])]
    
    0 讨论(0)
  • 2021-02-05 04:06

    Whenever you feel constrained by a method that only works in-place, you can use the behavior of or/and to achieve the semantics that you want.

    [x.discard('') or x for x in test]
    

    This technique is occasionally useful for achieving things in a lambda (or other situations where you are restricted to a single expression) that are otherwise impossible. Whether it's the most "readable" or "pythonic" is debatable :-)

    0 讨论(0)
  • 2021-02-05 04:27
    >>> s = set( ['a' , 'b', 'c' , 'd' ] )
    >>> print(s)
    set(['a', 'c', 'b', 'd'])
    >>>
    >>> s -= {'c'}
    >>> print(s)
    set(['a', 'b', 'd'])
    >>>
    >>> s -= {'a'}
    >>> print(s)
    set(['b', 'd'])
    
    0 讨论(0)
  • 2021-02-05 04:28

    This?(duplicate of @thefourtheye answer)

    set subtraction operation returns set data.

    test = [{'', 'a'}, {'b', ''}]
    print [x - {''} for x in test]
    print test
    

    Output:

    [set(['a']), set(['b'])]
    [set(['a', '']), set(['', 'b'])]
    
    0 讨论(0)
提交回复
热议问题