【发布时间】:2020-08-08 02:03:10
【问题描述】:
我一直在尝试使此代码更好/更快且更可持续,但尚未成功对其进行改进。
基本上,我需要循环进入一个元组列表,并将元组的每个元素与数据帧过滤器表达式连接起来,就像解决方案中显示的那样。然而,我列表中的元组长度不同,它们可以不时改变并具有不同的长度,有时我可以得到每个元素少于 4 个的元组,其他时候超过 6 个甚至 7/8 等等在。
我的解决方案有效,但每次元组长度增加时我都需要进行编辑,而且我知道这不是最有效的解决方案。为了避免嵌套 if,我将如何使用每个元组的长度在元组内部进行迭代?
感谢您的建议和cmets
实际列表:
Comb = [(),
('RD00',),
('RDC2',),
('RDC3',),
('RDC4',),
('RD00', 'RDC2'),
('RD00', 'RDC3'),
('RD00', 'RDC4'),
('RDC2', 'RDC3'),
('RDC2', 'RDC4'),
('RDC3', 'RDC4'),
('RD00', 'RDC2', 'RDC3'),
('RD00', 'RDC2', 'RDC4'),
('RD00', 'RDC3', 'RDC4'),
('RDC2', 'RDC3', 'RDC4'),
('RD00', 'RDC2', 'RDC3', 'RDC4')]
我想出了这个解决方案,我需要将每个元组中的元组元素连接起来,并在元组中的每个元素前面添加表达式:
for p in comb:
if len(p) == 1:
print(''"(fF2_Principal['Messagetype']=="'{}'.format("'"+p[0]+"')"))
if len(p) == 2:
print(''"(fF2_Principal['Messagetype']=="'{} & '" (fF2_Principal['Messagetype']=="'{}'.format("'"+p[0]+"')", "'"+p[1]+"')"))
elif len(p) == 3:
print(''"(fF2_Principal['Messagetype']=="'{} & '"(fF2_Principal['Messagetype']=="'{} & '"(fF2_Principal['Messagetype']=="'{}'.format("'"+p[0]+"')", "'"+p[1]+"')","'"+p[2]+"')"))
elif len(p) == 4:
print(''"(fF2_Principal['Messagetype']=="'{} & '"(fF2_Principal['Messagetype']=="'{} & '" (fF2_Principal['Messagetype']=="'{} & '"(fF2_Principal['Messagetype']=="'{}'.format("'"+p[0]+"')", "'"+p[1]+"')","'"+p[2]+"')","'"+p[3]+"')"))
elif len(p) == 5: # not done yet, my previous data had 5 elements in one tuple
print('{} : {} : {} : {} : {}'.format(p[0], p[1],p[2],p[3],p[4]))
上面的代码生成以下结果,这适用于我的目的,但是我无法监控数据以查看何时会出现不同长度的元组。
结果:
(fF2_Principal['Messagetype']=='RD00')
(fF2_Principal['Messagetype']=='RDC2')
(fF2_Principal['Messagetype']=='RDC3')
(fF2_Principal['Messagetype']=='RDC4')
(fF2_Principal['Messagetype']=='RD00') & (fF2_Principal['Messagetype']=='RDC2')
(fF2_Principal['Messagetype']=='RD00') & (fF2_Principal['Messagetype']=='RDC3')
(fF2_Principal['Messagetype']=='RD00') & (fF2_Principal['Messagetype']=='RDC4')
(fF2_Principal['Messagetype']=='RDC2') & (fF2_Principal['Messagetype']=='RDC3')
(fF2_Principal['Messagetype']=='RDC2') & (fF2_Principal['Messagetype']=='RDC4')
(fF2_Principal['Messagetype']=='RDC3') & (fF2_Principal['Messagetype']=='RDC4')
(fF2_Principal['Messagetype']=='RD00') & (fF2_Principal['Messagetype']=='RDC2') &
(fF2_Principal['Messagetype']=='RDC3')
(fF2_Principal['Messagetype']=='RD00') & (fF2_Principal['Messagetype']=='RDC2') &
(fF2_Principal['Messagetype']=='RDC4')
(fF2_Principal['Messagetype']=='RD00') & (fF2_Principal['Messagetype']=='RDC3') &
(fF2_Principal['Messagetype']=='RDC4')
(fF2_Principal['Messagetype']=='RDC2') & (fF2_Principal['Messagetype']=='RDC3') &
(fF2_Principal['Messagetype']=='RDC4')
(fF2_Principal['Messagetype']=='RD00') & (fF2_Principal['Messagetype']=='RDC2') &
(fF2_Principal['Messagetype']=='RDC3') & (fF2_Principal['Messagetype']=='RDC4')
非常感谢您的 cmets 并就如何改进此代码并使其更具可持续性提出建议。
【问题讨论】:
标签: python-3.x tuples