晚上好,我想请社区提供帮助以了解以下内容,
我一直在尝试使用函数式编程方法,并且发现了诸如map ()
reduce ()
filter ()
之类的基本功能,但是我想知道的是{{1} }在函数式编程中。
例如,在这段代码中,我必须执行多次循环才能找到结果:
for cycles
基本上,我不知道在这种情况下适用什么,它是test = {'one':1,'two':{'two-two':{'two-two-two':222,'three-three-three':333}},'three':3}
for i in test.items():
if i[0]=="two":
for s in i[1].items():
if s[0] == "two-two":
for a in s[1].items():
print(a[1])
或map ()
还是我希望您能帮助我的其他东西
答案 0 :(得分:1)
我明白了,这里您使用了函数式编程术语来介绍 map(), filter()和 reduce()在您的代码中,但是在这种情况下您不应该在这里使用它,因为函数式编程是指通过使用函数(模块化设计)来实现您的问题。
在您的情况下,您不能使用 filter(), reduce()来获得预期的结果,因为这些函数不能为您提供灵活的方法来控制程序的控制。
您可以尝试这样的操作,但我不希望您使用它,如果在 map()的情况下不满足条件,则可能会无 。使用 filter() / reduce()没有意义。
在这里,我试图使其按预期工作。
>>> def f(tup):
... items = []
... if tup[0] == 'two':
... for s in tup[1].items():
... if s[0] == "two-two":
... for a in s[1].items():
... print(a[1])
... items.append(a[1])
... return items
... else:
... return None
...
>>> test
{'one': 1, 'two': {'two-two': {'two-two-two': 222, 'three-three-three': 333}},
'three': 3}
>>>
>>> out = list(map(f, test.items()))
222
333
>>> out
[None, [222, 333], None]
>>>
>>> out[1]
[222, 333]
>>>
map(), filter()通常用于处理可迭代项,例如列表,元组,字典,集合等,并通过对项目执行操作来生成另一个可迭代项。 filter()允许我们过滤数据(从列表中选择偶数)。
reduce()通常用于处理可迭代并将其减少为单个值(例如,获取数字列表的总和)。
初始化
>>> l = [9, 4, 3, 2, 1]
>>> d = {'first': 'Rishikesh', 'last': 'Agrawani'}
>>> t = (3, 4, 5)
>>>
使用map()
>>> # Using map()
...
>>> map_obj = map(lambda n: n ** 2, l)
>>> map_obj
<map object at 0x0000016DAF88B6D8>
>>>
>>> squares = list(map_obj) # list(map(lambda n: n ** 2, l))
>>> squares
[81, 16, 9, 4, 1]
>>>
>>> details = {k + '-name': v for k, v in d.items()}
>>> details
{'first-name': 'Rishikesh', 'last-name': 'Agrawani'}
>>>
>>> details = dict(map(lambda tup: (tup[0] + '_name', tup[1]), d.items()))
>>> details
{'first_name': 'Rishikesh', 'last_name': 'Agrawani'}
>>>
使用filter()
>>> # Using filter() - let's filter even numbers from list
...
>>> filter_obj = filter(lambda n: n % 2 == 0, l)
>>> filter_obj
<filter object at 0x0000016DAF88B908>
>>>
>>> evens = list(filter_obj)
>>> evens
[4, 2]
>>>
使用reduce()
>>> # Using reduce() - finding sum of al numbers in a list
... # i.e. reducing list of values to a single value
...
>>> from functools import reduce
>>>
>>> total = reduce(lambda n1, n2: n1 + n2, l)
>>> total
19
>>>
答案 1 :(得分:-3)
您可以使用forEach()函数将一些回调函数应用于集合中的每个项目
基本实现如下:
function forEach(callback) {
for(index=0;index<len_of_collection;index++) {
callback(collection[index], index, collection);
}
}
您需要确保您的集合实现了此方法,以便您可以像这样从集合中调用它:
some_collection.forEach(myCustomCallback)
或内联:
some_collection.forEach(item => console.log(item))
请原谅JavaScript,我知道问题是在Python中出现的,但是该概念不是特定于语言的。
编辑:https://www.geeksforgeeks.org/python-map-function/
map()函数在应用给定后返回结果列表 给定可迭代项(列表,元组等)的每个项目的功能
您的示例未显示修改。因此,相符地映射将是不正确的。如果您要应用某些功能而不做任何修改,请探索类似于forEach的选项。