如何使用列表理解技术获得所需的结果列表?
How to get the desired resultant list using list comprehension technique?
我有一个列表:
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_key
这两个字段之外,我可以获得所需的列表。
为此,目前我正在使用插入方法,但我希望在列表理解本身中完成此操作。
如果您想替换某个项目,请使用映射字典。
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::]
...
第一个示例将 list_1 与包含“证书”和“private_key”的列表连接起来,第二个示例将 list_1 的拼接与相同的列表和 list_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 = ['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_key
这两个字段之外,我可以获得所需的列表。
为此,目前我正在使用插入方法,但我希望在列表理解本身中完成此操作。
如果您想替换某个项目,请使用映射字典。
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::]
...
第一个示例将 list_1 与包含“证书”和“private_key”的列表连接起来,第二个示例将 list_1 的拼接与相同的列表和 list_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']