Python 如何使用列表理解技术获得所需的结果列表?
我的名单如下:Python 如何使用列表理解技术获得所需的结果列表?,python,list,list-comprehension,Python,List,List Comprehension,我的名单如下: list_1 = ['id', 'name', 'organization', 'notes', 'key_length', 'digest', 'validity_start', 'validity_end', 'country_code', 'state', 'city', 'organization_name', 'organizational_unit_name', 'email', 'common_name
list_1 = ['id', 'name', 'organization', 'notes', 'key_length',
'digest', 'validity_start', 'validity_end', 'country_code',
'state', 'city', 'organization_name', 'organizational_unit_name',
'email', 'common_name', 'extensions', 'serial_number', 'passphrase',
'created', 'modified']
现在,我尝试编写一个列表理解代码,以获得以下列表作为最终结果:
list_2 = ['id', 'name', 'organization', 'notes',
'key_length', 'digest', 'validity_start', 'validity_end',
'country_code', 'state', 'city', 'organization_name', 'organizational_unit_name',
'email', 'common_name', 'serial_number', 'certificate',
'private_key', 'created', 'modified']
以下是我正在做的:
list_2 = [
field
for field in list_1
if field not in {'extensions', 'passphrase'}
]
使用上述LOC,我能够获得所需列表,除了两个字段certificate
,&private\u key
。
为此,目前我正在使用insert方法,但我希望在列表理解本身中完成此操作。如果要替换项,请使用映射词典
map_dict = {'extensions': 'certificate', 'passphrase': 'private_key'}
list_2 =
map_dict[field] if field in {'extensions', 'passphrase'}
else field
for field in list_1
]
如果列表中的位置无关紧要:
[field for
field in list_1+["certificate", "private_key"]
...
如果需要,您可以按如下方式指定所需的位置
[field for
field in list_1[0:17]+['certificate','private_key']+list_1[18::]
...
第一个示例将列表_1与包含“证书”和“私钥”的列表连接起来,第二个示例将列表_1与相同的列表和列表_1的其余部分连接起来
>>> [field for field in
list_1[0:17]+['certificate','private_key']+list_1[18::]
if field not in ['extensions','passphrase']]
#output
['id', 'name', 'organization', 'notes', 'key_length', 'digest',
'validity_start', 'validity_end', 'country_code', 'state', 'city',
'organization_name', 'organizational_unit_name', 'email',
'common_name', 'serial_number', 'certificate', 'private_key',
'created', 'modified']
作为一个框架挑战,我发现,至少在您作为示例给出的数据中,列表理解是最慢的,LCVcode建议的
list_2=list(set(list_1)-{'extensions','passphrase}
更快,而且
list1a.remove('extensions')
list1a.remove('passphrase')
他跑得最快。但是,如果您试图删除的元素不存在,最后一个方法将抛出错误
要添加元素,您可以执行
list_2=list(set(list_1)-{'extensions','passphrase'})+['certificate','private_key']
我可能错了,但我在list_1
中找不到证书或私钥,因此无法使用列表理解将它们放入list_2
。列表理解用于替换和函数,但不是在列表中添加内容,这是事实,但我们可以在处理理解之前连接两个列表。波斯特回答了你的问题吗?对于列表1+['certificate'、'private\u key']
@Thymen中的字段,可以执行列表2=[…]+['certificate'、'private\u key']
,但不能在列表中执行。要在内部执行,他可以遵循的解决方案是,通过将列表理解中的两个列表连接起来来解决问题,如list_2=[…+[]]
。我猜理解中的措辞有点模糊。对我来说,使用[x代表列表中的x+['c',p']]
将符合理解的“内部”,尽管不是内部。不管怎样,@DeMO的答案都能很好地抓住它。嘿,我被要求从列表1
中删除扩展名和密码短语,这样我就不会得到所需的结果。@manishhah我添加了一个代码块,显示完整的代码和收到的输出。