Python反转列表的每两个元素

时间:2015-09-29 03:22:28

标签: python list python-2.7 reverse

我在Python中有一个列表,我希望反转列表中的每对元素。这是清单:

list_ty = ['many_ord','many','12_FH_Temp_ord','12_FH_Temp','Celsius_ord','Celsius','Pressure_Pas_ord','Pressure_Pas','Kelvin_ord','Kelvin']

以下是我想要的内容:

list_out = ['many','many_ord','12_FH_Temp','12_FH_Temp_ord','Celsius','Celsius_ord','Pressure_Pas','Pressure_Pas_ord','Kelvin','Kelvin_ord']

其他信息:

列表中总会有偶数个元素。

_ord结尾的项目将始终位于没有_ord的项目之前。

问题:

有没有办法扭转以_ord结尾的每个项目的顺序以及没有_ord的以下(关联)项目?

5 个答案:

答案 0 :(得分:6)

一次使用for循环和第2步元素。您可以使用基本的python变量swap:

a, b = b, a
list_ty = ['many_ord','many','12_FH_Temp_ord','12_FH_Temp','Celsius_ord','Celsius','Pressure_Pas_ord','Pressure_Pas','Kelvin_ord','Kelvin']

for i in range(0, len(list_ty), 2):
    list_ty[i], list_ty[i+1] = list_ty[i+1], list_ty[i] 
此循环后

list_ty具有以下值:

['many', 'many_ord', '12_FH_Temp', '12_FH_Temp_ord', 'Celsius', 'Celsius_ord', 'Pressure_Pas', 'Pressure_Pas_ord', 'Kelvin', 'Kelvin_ord']

答案 1 :(得分:3)

作为一个单行,也许有点傻,但是你走了:

from itertools import chain

list_out = list(chain.from_iterable(zip(list_ty[1::2], list_ty[::2])))

解释:我们在步骤2中使用偏移1来获取奇数索引中的值,而使用偏移0来使用步骤2中的另一个切片来获得偶数索引。我们将zip放在一起,将[even, odd, even, odd,...]转换为((odd, even), (odd, even), ...),然后使用chain.from_iterable展开tuplelist以实现chain {1}}为我们生成。

答案 2 :(得分:2)

懒惰的方式:

>>> [x + y for x in list_ty if not x.endswith('_ord') for y in ('', '_ord')]
['many', 'many_ord', '12_FH_Temp', '12_FH_Temp_ord', 'Celsius', 'Celsius_ord', 'Pressure_Pas', 'Pressure_Pas_ord', 'Kelvin', 'Kelvin_ord']

忽略以“_ord”结尾的任何条目,只是将其交替添加到其他元素。

答案 3 :(得分:2)

有很多方法可以做到这一点,而这里有一个range(len())

list_out = [list_ty[idx+2*(not idx%2)-1] for idx in range(len(list_ty))]

这将遍历原始列表中的每个可能索引,并在该索引之前或之后抓取该项目。

0会抓住索引0 + 2*(not 0%2)-10 + 2*(not 0)-10 + 2*1-11的项目。

1会抓住索引为1 + 2*(not 1%2)-11 + 2*(not 1)-11 + 2*0-10的项目。

2会抓住索引为2 + 2*(not 2%2)-12 + 2*(not 0)-12 + 2*1-13的项目。

3会抓住索引3 + 2*(not 3%2)-13 + 2*(not 1)-13 + 2*0-12的项目。

正如您所看到的,0123代替1032 class ImportPricelistCommand extends Command implements SelfHandling, ShouldQueue { use InteractsWithQueue, SerializesModels; ,此模式将一直持续到结果完成。

答案 4 :(得分:0)

这样怎么样:

!curr.data.equals(item)