我想这样做:
a = ['xxx', 'yyy']
b = 'yyy'
for each_item in a:
if each_item == b:
print(['zzz'])
>>>['zzz']
我可以用列表理解来做到这一点:
print(['zzz' for each_item in a if each_item in b])
>>>['zzz']
Q1。请告诉我如何使用map()函数编写这个?这些列表长度不等,第一个列表可能很大
Q2。在函数式编程中写这个有什么其他选择吗?
答案 0 :(得分:3)
您可能正在寻找filter
:
a = ['xxx', 'yyy']
b = 'yyy'
interesting = list(filter(lambda x: x == b, a))
print(interesting)
或者使用生成器理解来获取更大的列表:
a = ['xxx', 'yyy']
list_ = (item
for item in a
if item == b)
答案 1 :(得分:2)
它相当于filter
而不是map
,所以当你想要避免列表推导时,你应该这样做:
filter(lambda x: x==b, a)
使用map
,您可以写:
map(lambda x: print(x) if x==b else None, a)
...但在我的意见中,它是一种糟糕的风格和纯粹功能构造(map
)与副作用动作(print
)的混合
注意:filter
和map
都返回Python 3中的可迭代对象,但不返回列表。如果您想要访问filter
和map
中的所有结果,请将其投放到列表中,即list(filter(...))
和list(map(...))
答案 2 :(得分:0)
你需要使用filter()而不是map()来过滤掉你的case列表中的iterable值,就像这样
=IIf(IsDate(Parameters!frompay.Value), FormatDateTime(
CDate(iif(isdate(Parameters!frompay.Value),Parameters!frompay.Value,"01/01/1900")),
DateFormat.ShortDate),
"Empty")