我在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
的以下(关联)项目?
答案 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
展开tuple
,list
以实现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)-1
或0 + 2*(not 0)-1
或0 + 2*1-1
或1
的项目。
1会抓住索引为1 + 2*(not 1%2)-1
或1 + 2*(not 1)-1
或1 + 2*0-1
或0
的项目。
2会抓住索引为2 + 2*(not 2%2)-1
或2 + 2*(not 0)-1
或2 + 2*1-1
或3
的项目。
3会抓住索引3 + 2*(not 3%2)-1
或3 + 2*(not 1)-1
或3 + 2*0-1
或2
的项目。
正如您所看到的,0123
代替1032
class ImportPricelistCommand extends Command implements SelfHandling, ShouldQueue
{
use InteractsWithQueue, SerializesModels;
,此模式将一直持续到结果完成。
答案 4 :(得分:0)
这样怎么样:
!curr.data.equals(item)