我有一个可变大小的列表.她总是至少有三个元素,而新元素总是三个元素的倍数.
示例列表如下:
['ttyUSB0', 'ttyUSB1', 'ttyUSB2', 'ttyUSB3', 'ttyUSB4',
'ttyUSB5', 'ttyUSB6', 'ttyUSB7', 'ttyUSB8']
Run Code Online (Sandbox Code Playgroud)
我的问题是我总是要选择这个三重奏的第二个元素.因此,对于上面的列表,我需要恢复以下结果:
['ttyUSB1', 'ttyUSB4', 'ttyUSB7']
Run Code Online (Sandbox Code Playgroud)
下面的代码完美,但不优雅,有人有更多的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
Run Code Online (Sandbox Code Playgroud)
谢谢你的时间
你可以使用切片:
>>> l = ['ttyUSB0', 'ttyUSB1', 'ttyUSB2', 'ttyUSB3', 'ttyUSB4', 'ttyUSB5', 'ttyUSB6', 'ttyUSB7', 'ttyUSB8']
>>> l[1::3]
['ttyUSB1', 'ttyUSB4', 'ttyUSB7']
Run Code Online (Sandbox Code Playgroud)
将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]
>>>
Run Code Online (Sandbox Code Playgroud)