在Python中重新排序列表以确保它以检查值开头

5 python list

我正在使用Pyserial读取串行数据,以256Hz的采样率填充17个值(每个1字节)的列表.

我最终想要使用的字节是列表中的第5到第8个字节.如果不提供字节,则流的前两个值始终相同('165','90').虽然我得到了很多丢弃的值,并且我的列表值正在移位,所以当我读取第5-8个字节时,它们不是正确的值.

我已经部分地通过确保在捕获想要的段落之前检查前几个值来确定它们应该是什么(即如果mylist [0] == 165&....).
这很粗糙但是没问题,因为这两个值在其他地方列表中彼此相邻的可能性很小.问题是,这意味着一旦字节移位,我就会丢失一堆值,直到它最终重新排列.

我的问题是:我可以使用哪些代码:

a)一旦检测到列表不再以165,90开始,强制列表重新排列.(ELIF ....).

b)检测列表中'165'和'90'(彼此相邻)的位置,并提取我想要的与其位置相关的值(下一个,一个,然后).

提前致谢

S_S

刚从相关Q中注意到我可以使用

mylist.append(mylist.pop(0)) 
Run Code Online (Sandbox Code Playgroud)

多次,直到他们在正确的地方.有没有更好的方式,任何人都可以建议?

Man*_*áoz 2

如果我很好地理解你的话,假设你有一个这样的列表:

l = [67, 126, 165, 90, 11, 1, 3, 5, 151, 99, 23]
Run Code Online (Sandbox Code Playgroud)

你想要获得:有用= [3,5,151,99]

然后,你可以这样做:

# obtain places where 165 is followed by 90
match = [x for x in xrange(len(l)-1) if l[x]==165 and l[x+1]==90]
# obtain range of useful values
useful = l[match[0]+4:match[0]+8]
Run Code Online (Sandbox Code Playgroud)

如果我误解了你的问题,你可能需要调整数字。希望能帮助到你,

曼努埃尔