Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 有没有更好的方法';复杂';列表理解?_Python_Performance_Format_List Comprehension - Fatal编程技术网

Python 有没有更好的方法';复杂';列表理解?

Python 有没有更好的方法';复杂';列表理解?,python,performance,format,list-comprehension,Python,Performance,Format,List Comprehension,我倾向于在Python中大量使用列表理解,因为我认为这是一种生成列表的干净方法,但我经常发现自己在一周后回来想自己“我这么做到底是为了什么?!”这是一个70多个字符的嵌套条件列表理解语句。我想知道我是否应该将其分解为if/elif/else,以及这样做对性能的影响(如果有) 我目前的情况: 调用返回的结构是元组列表。我需要将它转换为一个列表,一些值需要清理,我需要从列表中去掉最后一个元素 e、 g 因此,在本例中,我要删除RemoveMe,将所有'替换为',并将ChangeMe替换为val2。我

我倾向于在Python中大量使用列表理解,因为我认为这是一种生成列表的干净方法,但我经常发现自己在一周后回来想自己“我这么做到底是为了什么?!”这是一个70多个字符的嵌套条件列表理解语句。我想知道我是否应该将其分解为if/elif/else,以及这样做对性能的影响(如果有)

我目前的情况:

调用返回的结构是元组列表。我需要将它转换为一个列表,一些值需要清理,我需要从列表中去掉最后一个元素

e、 g

因此,在本例中,我要删除
RemoveMe
,将所有
'
替换为
'
,并将
ChangeMe
替换为
val2
。我知道这是一个很大的变化,但我返回的数据有时是可怕的,我无法控制什么是我的反应

我目前有一些类似于:

response = cursor.fetchall()
response = [['' if item == ' ' else item if item != 'ChangeMe' else 'val2' for item in row][:-1] for row in response]`
嵌套的多条件理解语句不受欢迎吗?我知道Python在风格上更倾向于可读性强,但也更紧凑,不太冗长


任何提示或信息将不胜感激。谢谢大家

这是一种利用字典映射项目进行列表理解的快速方法:

response = [('val1', ' ', 'ChangeMe', 'RemoveMe'), ('val1', ' ', 'ChangeMe', 'RemoveMe'), ('val1', ' ', 'ChangeMe', 'RemoveMe')]
map_dict = {' ': '', 'ChangeMe': 'val2', 'val1': 'val1'}

response = [tuple(map_dict[x] for x in tupl if x != 'RemoveMe') for tupl in response]
# [('val1', '', 'val2'), ('val1', '', 'val2'), ('val1', '', 'val2')]                                                   

这是一种利用字典映射项目进行列表理解的快速方法:

response = [('val1', ' ', 'ChangeMe', 'RemoveMe'), ('val1', ' ', 'ChangeMe', 'RemoveMe'), ('val1', ' ', 'ChangeMe', 'RemoveMe')]
map_dict = {' ': '', 'ChangeMe': 'val2', 'val1': 'val1'}

response = [tuple(map_dict[x] for x in tupl if x != 'RemoveMe') for tupl in response]
# [('val1', '', 'val2'), ('val1', '', 'val2'), ('val1', '', 'val2')]                                                   

Python只支持一行程序,唯一的条件是这些程序使代码更具可读性,而不是使代码复杂化

在本例中,使用两个嵌套的列表理解、两个相邻的三元运算符、一个列表切片,所有这些都在一行上,超过100个字符。。。它几乎是可读的

有时最好使用经典for循环

result = []
for val, space, item, remove in response:
    result.append([val, '', 'val2'])
然后你意识到你可以把它写成一个更容易理解的列表(假设你的过滤条件很简单):


请记住,每个代码都编写一次,但是它被多次读取

Python只支持一个行程序,唯一的条件是这些行程序使代码更可读,而不是使代码复杂化

在本例中,使用两个嵌套的列表理解、两个相邻的三元运算符、一个列表切片,所有这些都在一行上,超过100个字符。。。它几乎是可读的

有时最好使用经典for循环

result = []
for val, space, item, remove in response:
    result.append([val, '', 'val2'])
然后你意识到你可以把它写成一个更容易理解的列表(假设你的过滤条件很简单):


请记住,每段代码都是写一次,但它是读很多次

那么短,那么容易理解+1:)感谢您的输入,谢谢!是的,这几乎就是我在列表中得到的,理解可以很快变得复杂,只需要几个条件,变得不可读。我同意for循环+简单理解更容易理解。部分解包。但是,性别问题是一个简短的、可理解的列表+1:)感谢您的输入,谢谢!是的,这几乎就是我在列表中得到的,理解可以很快变得复杂,只需要几个条件,变得不可读。我同意for循环+简单理解更容易理解。部分解包。性感