Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.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优化:[a、b、c]>;[str(a)、str(b)、str(c)]_Python_String_List - Fatal编程技术网

python优化:[a、b、c]>;[str(a)、str(b)、str(c)]

python优化:[a、b、c]>;[str(a)、str(b)、str(c)],python,string,list,Python,String,List,我需要将各种实体的列表转换为字符串。到目前为止,我使用: all_ents_dead=[] # converted to strings for i in all_ents: all_ents_dead.append(str(i)) 有没有一种优化的方法 编辑:然后我需要找到其中哪些包含特定字符串。到目前为止,我已经: matching = [s for s in all_ents_dead if "GROUPS" in s] 使用该函数。这将获取您现有的列表,对每个项运行一个函数

我需要将各种实体的列表转换为字符串。到目前为止,我使用:

all_ents_dead=[] # converted to strings

for i in all_ents:
    all_ents_dead.append(str(i))
有没有一种优化的方法

编辑:然后我需要找到其中哪些包含特定字符串。到目前为止,我已经:

matching = [s for s in all_ents_dead if "GROUPS" in s]
使用该函数。这将获取您现有的列表,对每个项运行一个函数,并返回一个新的列表/迭代器(见下文),其中函数的结果应用于每个元素

all_ends_dead = map(str, all_ents)
在Python3+中,
map()
将返回一个迭代器,而在Python2中,它将返回一个列表。迭代器可以有您想要的优化,因为它在需要时生成值,而不是一次生成所有值(与列表相反)。

使用该函数。这将获取您现有的列表,对每个项运行一个函数,并返回一个新的列表/迭代器(见下文),其中函数的结果应用于每个元素

all_ends_dead = map(str, all_ents)

在Python3+中,
map()
将返回一个迭代器,而在Python2中,它将返回一个列表。迭代器有希望的优化,因为它在需要时生成值,而不是一次生成(与列表相反)。

每当您有<代码> name=[]/COD>,然后<代码> name .AppEnter()/代码>在循环模式中,考虑使用A。列表理解从循环中构建列表,而不必使用
list.append()
查找和调用,从而使其更快:

all_ents_dead = [str(i) for i in all_ents]
这直接与您拥有的代码相呼应,但在
all_ents\u dead.append(…)
中的表达式被移动到
for
循环的前面

如果您实际上不需要一个列表,但只需要迭代<代码> Stand()转换,就应该考虑懒惰转换选项。您可以将列表转换为:

或者,当仅应用功能时,在

当您迭代生成的对象时,这两种方法都会延迟应用
str()
。这有助于避免在实际不需要的地方创建新的列表对象,从而节省内存。但请注意,生成器表达式可能较慢;如果性能受到影响,考虑基于输入大小、内存限制和时间试验的所有选项。 对于特定的搜索示例,您可以嵌入
map()
调用:

matching = [s for s in map(str, all_ents) if "GROUPS" in s]

它会生成一个匹配字符串列表,而不创建一个中间字符串列表,然后你就不会在其他任何地方使用它。

每当你有一个<代码> name=[]/COD>,然后<代码> name .AppEnter()/代码>在一个循环模式中,考虑使用A。列表理解从循环中构建列表,而不必使用
list.append()
查找和调用,从而使其更快:

all_ents_dead = [str(i) for i in all_ents]
这直接与您拥有的代码相呼应,但在
all_ents\u dead.append(…)
中的表达式被移动到
for
循环的前面

如果您实际上不需要一个列表,但只需要迭代<代码> Stand()转换,就应该考虑懒惰转换选项。您可以将列表转换为:

或者,当仅应用功能时,在

当您迭代生成的对象时,这两种方法都会延迟应用
str()
。这有助于避免在实际不需要的地方创建新的列表对象,从而节省内存。但请注意,生成器表达式可能较慢;如果性能受到影响,考虑基于输入大小、内存限制和时间试验的所有选项。 对于特定的搜索示例,您可以嵌入
map()
调用:

matching = [s for s in map(str, all_ents) if "GROUPS" in s]

这将生成一个匹配字符串的列表,而不会创建一个字符串对象的中间列表,这样您就不会在其他任何地方使用这些对象。

请更新您的问题,以解释您期望的结果,并解释您得到的结果。我期望的结果解释得非常清楚。我得到的和下面的好人给我的建议是一样的。这个问题是关于一个已经存在的解决方案的优化…请更新你的问题,解释你期望的结果,解释你得到的结果。我期望的结果解释得很清楚。我得到的和下面的好人给我的建议是一样的。这个问题是关于一个已经存在的解决方案的优化…请解释为什么他们应该使用地图。@Soviut我真的不喜欢你这样编辑我的答案。非常欢迎您提供自己的答案,谢谢!这(在Py3下)返回
,而不是列表@Jewenile是的,因此返回一个
map
对象——一个迭代器——文档对此进行了解释。如果您想将其返回到列表中,可以围绕map对象调用
list()
,但根据您的长期打算,将其保留为map对象可能会有所帮助。请解释他们为什么要使用map。@Soviut我真的不喜欢您这样编辑我的答案。非常欢迎您提供自己的答案,谢谢!这(在Py3下)返回
,而不是列表@Jewenile是的,因此返回一个
map
对象——一个迭代器——文档对此进行了解释。如果要将其返回到列表,可以围绕map对象调用
list()
,但根据您希望在长期内执行的操作,将其保留为map对象可能会有所帮助