Python 在这段代码中如何使用map()?
我有一个字符串列表Python 在这段代码中如何使用map()?,python,Python,我有一个字符串列表 [str1, str2, str3.....] 我还有一个def来检查字符串的格式,比如: def CheckIP(strN): if(formatCorrect(strN)): return True return False 现在我想检查列表中的每个字符串,当然我可以使用for逐个检查。但是我是否可以使用map()使代码更具可读性…?您可以将列表映射到函数,然后使用检查它是否为每个项目返回True: if all(map(CheckIP
[str1, str2, str3.....]
我还有一个def
来检查字符串的格式,比如:
def CheckIP(strN):
if(formatCorrect(strN)):
return True
return False
现在我想检查列表中的每个字符串,当然我可以使用for逐个检查。但是我是否可以使用
map()
使代码更具可读性…?您可以将列表映射到函数,然后使用检查它是否为每个项目返回True
:
if all(map(CheckIP, list_of_strings)):
# All strings are good
实际上,只需去掉CheckIP
函数并直接使用formatCorrect
就更干净了:
if all(map(formatCorrect, list_of_strings)):
# All strings are good
另外,all
使用延迟评估作为额外的奖励。也就是说,在返回结果之前,它只检查所需数量的项
但是请注意,更常见的方法是使用一个而不是
映射
:
if all(formatCorrect(x) for x in list_of_strings):
在我看来,生成器表达式总是优于map
,因为:
map
更快的话,它们也同样快。此外,在Python2.x中,map
创建了一个通常不必要的列表对象(浪费内存)。只有在Python3.x中,map
像生成器表达式一样使用惰性计算sum(x * 2 for x in (1, 2, 3))
map
、filter
等函数。尽管这不是一成不变的,但它在Python社区中已经出现过很多次当然,如果你是函数式编程的爱好者,你不大可能同意第一点和第四点 您可以将列表映射到函数,然后使用检查是否为每个项目返回
True
:
if all(map(CheckIP, list_of_strings)):
# All strings are good
实际上,只需去掉CheckIP
函数并直接使用formatCorrect
就更干净了:
if all(map(formatCorrect, list_of_strings)):
# All strings are good
另外,all
使用延迟评估作为额外的奖励。也就是说,在返回结果之前,它只检查所需数量的项
但是请注意,更常见的方法是使用一个而不是
映射
:
if all(formatCorrect(x) for x in list_of_strings):
在我看来,生成器表达式总是优于map
,因为:
map
更快的话,它们也同样快。此外,在Python2.x中,map
创建了一个通常不必要的列表对象(浪费内存)。只有在Python3.x中,map
像生成器表达式一样使用惰性计算sum(x * 2 for x in (1, 2, 3))
map
、filter
等函数。尽管这不是一成不变的,但它在Python社区中已经出现过很多次当然,如果你是函数式编程的爱好者,你不大可能同意第一点和第四点 一个例子,您可以如何做:
in_str = ['str1', 'str2', 'str3', 'not']
in_str2 = ['str1', 'str2', 'str3']
def CheckIP(strN):
# different than yours, just to show example.
if 'str' in strN:
return True
else:
return False
print(all(map(CheckIP, in_str))) # gives false
print(all(map(CheckIP, in_str2))) # gives true
例如,您可以如何做:
in_str = ['str1', 'str2', 'str3', 'not']
in_str2 = ['str1', 'str2', 'str3']
def CheckIP(strN):
# different than yours, just to show example.
if 'str' in strN:
return True
else:
return False
print(all(map(CheckIP, in_str))) # gives false
print(all(map(CheckIP, in_str2))) # gives true
answer
是一个布尔值列表,使得answer[i]
是CheckIP(L[i])
。如果要进一步检查所有这些值是否为真,可以使用all
:
all(answer)
当且仅当answer
中的所有值均为True
时,此函数返回True
。但是,您可以在不列出列表的情况下执行此操作:
all(map(CheckIP, L)), as, in python3, `map` returns an iterator, not a list. This way, you don't waste space turning everything into a list. You also save on time, as the first `False` value makes `all` return `False`, stopping `map` from computing any remaining values
answer
是一个布尔值列表,使得answer[i]
是CheckIP(L[i])
。如果要进一步检查所有这些值是否为真,可以使用all
:
all(answer)
当且仅当answer
中的所有值均为True
时,此函数返回True
。但是,您可以在不列出列表的情况下执行此操作:
all(map(CheckIP, L)), as, in python3, `map` returns an iterator, not a list. This way, you don't waste space turning everything into a list. You also save on time, as the first `False` value makes `all` return `False`, stopping `map` from computing any remaining values
什么是最好的,为什么?我想你已经说过了,但更详细地说-
所有的
只会在它找到一个False
的值之前进行,所以如果前几个值中有一个是坏的,那么在找到它之前只需迭代几次,所需的时间就会少得多。@G.Meyer-你是对的,我本来应该更清楚的。使用all
是非常重要的一点。更新。什么是最好的?为什么?我想你已经说过了,但更详细地说-所有的
只会在它找到一个False
的值之前进行,所以如果前几个值中有一个是坏的,那么在找到它之前只需迭代几次,所需的时间就会少得多。@G.Meyer-你是对的,我本来应该更清楚的。使用all
是非常重要的一点。更新。还有一个快速提示-在CheckIP
函数中,实际上不需要if
语句,因为如果formatCorrect
为真,则返回True
,如果为假,则返回False
。因此,您可以按照<任务> >代码>(代码)> <代码>返回格式纠正(STRN)。谢谢G. Meyer,好建议!还有一个快速注意事项-在CheckIP
函数中,实际上不需要if
语句,因为如果formatCorrect
为真,则返回True
,如果为假,则返回False
。因此,您可以根据任务考虑做<代码>返回格式纠正(STRN)< /代码>。