我正在尝试通过向其中添加元素来对 python 中的集合进行排序。我尝试使用 sorted() 方法,但它正在将我的集合转换为列表。我需要对我的元素进行排序并将其打印为一个集合本身。我怎样才能做到这一点?
我尝试使用 sorted() 方法并获得了一个列表。试图将列表放入一个集合中。但是,没有收到要求的结果
a={}
a=set()
a.add(1)
a.add(-1)
a.add(0)
a.add(4)
a.add(-3)
print(a)
Run Code Online (Sandbox Code Playgroud)
预期结果:{-3, -1, 0, 1, 4} 实际结果:{0, 1, 4, -3, -1}
基本代码:
var1 = ['b', 'a', 'c', 'd']
var2 = ['c', 'a']
print(set(var1).difference(set(var2)))
Run Code Online (Sandbox Code Playgroud)
输出:
{'b', 'd'}
Run Code Online (Sandbox Code Playgroud)
题
是否可以将此输出按字母顺序排序?如果是这样,我该怎么办?
这是我尝试过的:
print(set(var1).difference(set(var2)).sort())
Run Code Online (Sandbox Code Playgroud)
但是出现错误:
print(set(var1).difference(set(var2)).sort())
AttributeError: 'set' object has no attribute 'sort'
Run Code Online (Sandbox Code Playgroud) 为什么Python的set对象没有sort()
方法?
>>> dir(set)
['__and__', '__class__', '__cmp__', '__contains__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__iand__', '__init__', '__ior__', '__isub__', '__iter__', '__ixor__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__or__', '__rand__', '__reduce__', '__reduce_ex__', '__repr__', '__ror__', '__rsub__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', '__xor__', 'add', 'clear', 'copy', 'difference', 'difference_update', 'discard', 'intersection', 'intersection_update', 'isdisjoint', 'issubset', 'issuperset', 'pop', 'remove', 'symmetric_difference', 'symmetric_difference_update', 'union', 'update']
Run Code Online (Sandbox Code Playgroud) 以下单元测试在运行时失败(使用 pytest),但是当我调试它时,它通过了:
def test():
assert list(set(['B', 'A'])) == ['A', 'B']
Run Code Online (Sandbox Code Playgroud)
我知道集合没有 order,但我不明白如何确定list(s)
ifs
是一个集合的结果,这在编写单元测试时至关重要。这里提到的解决方法是将代码更改为sorted(s)
,但我想了解list(s)
运行时会发生什么。