确定列表内容是否从奇数值更改为偶数值的python方法

2024-09-28 05:40:18 发布

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

编写一些测试用例时,我的思绪在徘徊,假设有更好的方法来编写这样的东西。我有一个列表,它的数字从所有的奇数到所有的偶数,在哪里都不重要。我要断言这是事实,我想到的是:

values = [1, 3, 5, 7, 5, 3, 5, 3, 5, 7, 4, 6, 8, 4, 2, 2, 8, 6]

# find all the indexes of odd and even values
odds = [i for (i, v) in enumerate(values) if v % 2 == 1]
evens = [i for (i, v) in enumerate(values) if v % 2 == 0]

# indexes should be a continuous sequence: 0, 1, 2, 3 ... n
assert odds + evens == range(evens[-1] + 1)

似乎还有很长的路要走。关于如何减少这种情况的建议?在


Tags: 方法in列表forif测试用例数字values
3条回答
[x for x in values if x % 2 == 1] + [x for x in values if x % 2 == 0] == values

只有当values以它自己的所有奇数值开头,后跟所有的偶数值时,这才是正确的。在

一个可能的解决方案是考虑你只允许

odd->odd
odd->even
even->even

换句话说,唯一被禁止的转变是

^{pr2}$

这意味着

(0, 1) not in ((x%2, y%2) for x, y in zip(values, values[1:]))

好吧,你不需要计算evens

assert odds == range(len(odds))

相关问题 更多 >

    热门问题