【发布时间】:2021-03-16 21:33:30
【问题描述】:
假设我们有随机大小的 python 列表,其中的值是 0 和 1 的随机序列。确定序列是否是最多 3 个位置的以下类型之一并为“序列类型”返回以下字符串之一的好方法是什么?:
-
0(只有0个)[0,0,0]
-
1(只有1个)[1,1]
-
01(以 0 开头然后遇到 1 x 后的位数)[0,0,0,0,1]
-
10(10 的倒数)[1,0,0,0,0]
-
010(从0开始,在0之后遇到1 x位数,然后在1之后遇到0 x位数)[0,0,0,1,0,1,1,0]
-
101(与上述相反)[1,1,1,1,1,0,0,1,0,1,0,1]
我可以想到简单的情况,然后是一种简单的方法,即嵌套循环并保留一个计数器,但是有没有更优雅的方法来做到这一点?
def sequence_type(sequence):
if 0 not in sequence:
return '1'
elif 1 not in sequence:
return '0'
else:
if sequence[0] == 0:
# loop through for sequence type 0xx
elif sequence[0] == 1:
# loop through for sequence type 1xx
编辑:我们在检查类型时不关心序列末尾的内容,而是查看前 3 个“唯一”数字时的序列。
例如:[0,0,1,0,1,0] 是 010 类型,因为:
- 0 是第一个数字,是我们的“起点”
- 然后我们向右走,看到它是另一个 0,所以它不是唯一的,跳过并再次向右移动
- 然后遇到一个 1,我们记录这个,因为它是唯一的,再次向右移动
- 看到这个数字是 0 并且是唯一的(我们现在数了 3 个数字),所以模式是 010。
【问题讨论】:
-
最后两种情况,还有其他限制吗?我们遇到第一个??? ???后面的数字,或者我们可以遇到一个??????,但不是我们的目的,例如,?????????????????????
-
@SamHenke 我做了一个编辑,希望能把事情弄清楚
-
那么,根据您的编辑,[0,1,0,1] 应该是“010”吧?
-
正确的@AlainT。
标签: python list algorithm sequence