以相同的步骤单独列出

时间:2014-05-13 03:57:52

标签: python

我有一个可变大小的列表。她总是至少有三个元素,而新元素总是三个元素的倍数。

示例列表如下:

['ttyUSB0', 'ttyUSB1', 'ttyUSB2', 'ttyUSB3', 'ttyUSB4',
'ttyUSB5', 'ttyUSB6', 'ttyUSB7', 'ttyUSB8']

我的问题是我总是要选择这个三重奏的第二个元素。因此,对于上面的列表,我需要恢复以下结果:

['ttyUSB1', 'ttyUSB4', 'ttyUSB7']

下面的代码运行完美,但不优雅,有人有更多的inteigente解决方案吗?

def removeUselessSerialDoors(self, devices):

    new_list = []
    count = 0

    for port in devices:

        if count == 0:
            pass

        elif count == 1:
            new_list.append(port)

        elif count == 2:
            count = 0
            continue

        count = count + 1    

    return new_list

感谢您的时间

2 个答案:

答案 0 :(得分:6)

您可以使用slicing

>>> l = ['ttyUSB0', 'ttyUSB1', 'ttyUSB2', 'ttyUSB3', 'ttyUSB4', 'ttyUSB5', 'ttyUSB6', 'ttyUSB7', 'ttyUSB8']
>>> l[1::3]
['ttyUSB1', 'ttyUSB4', 'ttyUSB7']

1中的[1::3]为索引提供了开始,3给出了'乘数':

>>> lst = range(1, 10)
>>> lst[::3]
[1, 4, 7]
>>> lst[1::3]
[2, 5, 8]
>>> lst[0::3]
[1, 4, 7]
>>> lst[0::2]
[1, 3, 5, 7, 9]
>>> lst[1::2]
[2, 4, 6, 8]
>>> 

答案 1 :(得分:0)

>>l=['ttyUSB0', 'ttyUSB1', 'ttyUSB2', 'ttyUSB3', 'ttyUSB4','ttyUSB5', 'ttyUSB6', 'ttyUSB7', 'ttyUSB8']
>>newList=[]
>>for i in range(1,len(l),3):
        newlist.append(l[i])
>>newList
   ['ttyUSB1', 'ttyUSB4', 'ttyUSB7']

enter image description here