减法元组

2024-05-13 23:59:04 发布

您现在位置:Python中文网/ 问答频道 /正文

在python中执行以下操作的优雅方式是什么:

modes = (1,2,4,5,7,8,9)

start_modes = (1,2,5)
stop_modes = tuple(set(modes) - set(start_modes))

fast_modes = (2,7)
slow_modes = tuple(set(modes) - set(fast_modes))

我在定义我正在测试的系统的行为。在我的测试中,我有时会对遍历所有modes感兴趣,有时我会对迭代{}s感兴趣。在

我希望上面定义的所有变量都是不可变的,因为它们永远不会改变。我也希望他们的顺序总是一样的,因为我希望我的测试行为一致。在


Tags: 定义顺序系统方式start感兴趣faststop
2条回答

改为使用sets

modes = frozenset([1,2,4,5,7,8,9])

start_modes = {1,2,5}
stop_modes = modes - start_modes

fast_modes = {2,7}
slow_modes = modes - fast_modes

这里frozenset()set()的等价物,tuple();一个不可变的类型。start_modesfast_modes集使用{...}集文本表示法,生成一个可变的set()对象。您也可以始终使用frozenset()。在

集合只能包含唯一的元素,而不维护元素的顺序。您仍然可以将集合转换回元组,但对于您的问题,元组似乎是错误的数据类型。在

集合是可编辑的;您可以循环这些集合,但顺序取决于集合的插入和删除历史记录以及包含的值。在

如果order很重要,请在tuple()调用中使用生成器表达式来生成值:

^{pr2}$

虽然在这里没有多大区别,但是如果您可以使start_modesfast_modesset或{}对象,not in负成员身份测试会更快。在

使用集合:

modes = {1,2,4,5,7,8,9}
stop_modes = modes - {1,2,5}

相关问题 更多 >