Python 减去元组

Python 减去元组,python,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)) 我正在定义我正在测试的系统的行为。在我的测试中,我有时会对迭代所有模式感兴趣,有时我会对迭代慢速模式感兴趣 我希望上面

在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 = {1,2,4,5,7,8,9}
stop_modes = modes - {1,2,5}
您可以改为使用:

这里frozenset是元组的集合等价物;不可变类型。start_模式和fast_模式集使用{…}set文字表示法,生成可变的set对象。您也可以随时使用frozenset

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

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

如果顺序很重要,请在元组调用中使用生成器表达式生成值:

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

start_modes = (1, 2, 5)
stop_modes = tuple(m for m in modes if m not in start_modes)

fast_modes = (2, 7)
slow_modes = tuple(m for m in modes if m not in fast_modes)

虽然在这里没有太大区别,但如果您可以设置start_模式和fast_模式或frozenset对象,则非负成员身份测试将更快。

我希望模式是immutable@Baz:那么你可以用一个冰柜来代替。我想要一个冰柜immutable@chepner:显然,我需要更多的茶。更正。@Martijn Pieters我正在测试一个系统,在某些测试中,我测试所有模式,在其他测试中,我测试例如慢_模式。我更喜欢不同的模式列表是固定顺序的,因为对于测试来说,它感觉更一致,每次都是相同顺序的模式。我已经用这些信息更新了我的问题。请告诉我们你想要的结果achieve@Jesuisme问题更新请提供所需输出的示例;比如1,2,4-1,2=4,
modes = (1, 2, 4, 5, 7, 8, 9)

start_modes = (1, 2, 5)
stop_modes = tuple(m for m in modes if m not in start_modes)

fast_modes = (2, 7)
slow_modes = tuple(m for m in modes if m not in fast_modes)