在列表中检查Python中不断出现的特定值

2024-09-30 16:42:19 发布

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

我正在做一个涉及加速计和arduino的项目。我在笔记本电脑方面使用Python。加速计向笔记本电脑发送大量字节。到目前为止,我的代码是将前100个字节放入一个列表中

my_list = []

data = ser.read(100)

for n in data:

    n = ser.read(size=1)
    y = int.from_bytes(n,byteorder='big')
    my_list.append(y)

我知道一个数字(48)经常出现,我想要48之后的六个数字。因此:

if 48 in my_list:

    my_list.index(48)
    x0 = my_list[(my_list.index(48))+1]
    x1 = my_list[(my_list.index(48))+2]
    y0 = my_list[(my_list.index(48))+3]
    y1 = my_list[(my_list.index(48))+4]
    z0 = my_list[(my_list.index(48))+5]
    z1 = my_list[(my_list.index(48))+6]

这很好,但我需要一种方法,这样一旦完成,它就可以通过列表继续到下一个48,并重复这个过程。并一直这样做直到列表结束。 有人能帮忙吗?我认为使用iter功能可能会起作用,但不确定如何使用它来实现这一点


Tags: 项目代码in列表readdataindex字节
2条回答

您可以使用itertools.islice

my_list = [1,2,48,1,2,3,4,5,6,48,1,2,3,4,5,6]

from itertools import islice
for ind, ele in enumerate(my_list):
    if ele == 48:
        a, b, c, d, e, f = islice(my_list, ind+1, ind+7)
        print(a,b,c,d,e,f)
1 2 3 4 5 6
1 2 3 4 5 6

您可能还应该使用try/except,因为如果在最后6个元素中的任何一个元素中有48个元素,您将得到一个错误,因为如果剩下的项目少于7个,您将无法在之后获得6个项目:

for ind, ele in enumerate(my_list):
    if ele == 48:
        try:
            a, b, c, d, e, f = islice(my_list, ind+1, ind+7)
            print(a, b, c, d,e, f)
        except ValueError:
            pass

您可以使用生成器:

def generate_coordinates(lst, size=6):
    for i in lst:
        if lst[i] == 48:
            yield lst[i + 1: i + 1 + size]

然后像这样使用它:

for coordinates in generate_coordinates(my_list):
    x0, x2, y0, y1, z0, z1 = coordinates
    # .. do stuff with x, y, z ...

相关问题 更多 >