我想知道是否有办法在某些东西上运行地图.map的工作方式是它需要一个iterable并将一个函数应用于该iterable中的每个项目,从而生成一个列表.有没有办法让map修改可迭代对象本身?
说我有以下代码
data.stream()
.map(x -> {
Object a = maybeReturnsNull(x);
return a == null ? defaultValue : a;
})
Run Code Online (Sandbox Code Playgroud)
我有一些可能正在返回的函数,null我将它应用于流的一个元素.然后我想确保将任何null结果更改为某个默认值.与使用上一个定义辅助变量a并在lambda表达式中使用代码块的示例相比,使用两个映射(如下例)之间是否存在任何显着差异?
data.stream()
.map(x -> maybeReturnsNull(x))
.map(x -> x == null ? defaultValue : x)
Run Code Online (Sandbox Code Playgroud)
有没有标准在哪里或不避免使用lambda函数的块语句?
我有这样的代码:
let things = vec![/* ...*/]; // e.g. Vec<String>
things
.map(|thing| {
let a = try!(do_stuff(thing));
Ok(other_stuff(a))
})
.filter(|thing_result| match *thing_result {
Err(e) => true,
Ok(a) => check(a),
})
.map(|thing_result| {
let a = try!(thing_result);
// do stuff
b
})
.collect::<Result<Vec<_>, _>>()
Run Code Online (Sandbox Code Playgroud)
在语义方面,我想在第一个错误后停止处理.
上面的代码有效,但感觉非常麻烦.有没有更好的办法?我查看了类似的文档filter_if_ok,但我没有找到任何东西.
我知道collect::<Result<Vec<_>, _>>,它很有效.我特意试图消除以下样板:
match的thing_result.我觉得这应该只是一个单行,例如.filter_if_ok(|thing| check(a)).map,我都要包含一个额外的声明let a = try!(thing_result);,以便处理一个可能性Err.再一次,我觉得这可以被抽象出来.map_if_ok(|thing| ...).有没有其他方法可以用来获得这种简洁程度,或者我只是需要强硬一点?
我有一个元组元组,我想把每个元组中的第一个值放入一个集合中.我认为使用map()将是一个很好的方法,这是唯一的事情是我找不到一个简单的方法来访问元组中的第一个元素.所以例如我有元组((1,), (3,)).我想做一些像set(map([0], ((1,), (3,))))(在哪里[0]访问第0个元素)得到一个包含1和3的集合.我能想到的唯一方法是定义一个函数:def first(t): return t[0].无论如何在一行中执行此操作而不必声明函数?
编程语言:Scheme/DrRacket
目前,我们打算过map,filter和foldr我的基本的计算机科学类.我知道这三个都可以用来创建抽象函数,但老实说我对三者之间的区别以及何时使用每个函数有点困惑.
任何人都在关心解释每个用途的含义以及它们的不同之处?不幸的是我的书不是很清楚.
在Python中,如果n是k(IOW,)的倍数,很容易将n长列表分解为k -size块.这是我最喜欢的方法(直接来自文档):n % k == 0
>>> k = 3
>>> n = 5 * k
>>> x = range(k * 5)
>>> zip(*[iter(x)] * k)
[(0, 1, 2), (3, 4, 5), (6, 7, 8), (9, 10, 11), (12, 13, 14)]
Run Code Online (Sandbox Code Playgroud)
(诀窍是[iter(x)] * k产生一个对同一个迭代器的k个引用列表,如返回的那样.然后通过调用迭代器的每个k副本一次来生成每个块.之前是必要的因为期望接收它的参数为"单独的" "迭代器,而不是它们的列表."iter(x)zip*[iter(x)] * kzip
我用这个习语看到的主要缺点是,当n不是k的倍数(IOW,n % k > 0 …
我想做这样的事情,但这段代码返回无列表(我认为这是因为list.reverse()正在反转列表):
map(lambda row: row.reverse(), figure)
Run Code Online (Sandbox Code Playgroud)
我试过这个,但反过来返回一个迭代器:
map(reversed, figure)
Run Code Online (Sandbox Code Playgroud)
最后我做了这样的事情,这对我有用,但我不知道这是否是正确的解决方案:
def reverse(row):
"""func that reverse a list not in place"""
row.reverse()
return row
map(reverse, figure)
Run Code Online (Sandbox Code Playgroud)
如果有人有一个我不知道的更好的解决方案,请告诉我
亲切的问候,
我正在将字典传递给map函数以重新编码Pandas数据帧列中的值.但是,我注意到如果原始系列中的某个值未在字典中显式显示,则会将其重新编码NaN.这是一个简单的例子:
打字...
s = pd.Series(['one','two','three','four'])
Run Code Online (Sandbox Code Playgroud)
...创建系列
0 one
1 two
2 three
3 four
dtype: object
Run Code Online (Sandbox Code Playgroud)
但是应用地图......
recodes = {'one':'A', 'two':'B', 'three':'C'}
s.map(recodes)
Run Code Online (Sandbox Code Playgroud)
...返回系列
0 A
1 B
2 C
3 NaN
dtype: object
Run Code Online (Sandbox Code Playgroud)
我希望如果系列中的任何元素s不在recodes字典中,它将保持不变.也就是说,我更愿意返回下面的系列(原文four而不是NaN).
0 A
1 B
2 C
3 four
dtype: object
Run Code Online (Sandbox Code Playgroud)
有没有一种简单的方法可以做到这一点,例如传递给map函数的选项?我遇到的挑战是,我无法始终预测将要重新编码的系列中的所有可能值 - 数据将在未来更新,并且可能会出现新值.
谢谢!
从文档中
duckmap将对每个元素应用和阻止,并返回一个新的列表,其中包含块的已定义返回值.对于未定义的返回值,如果该元素实现了Iterable,则duckmap将尝试进入该元素.
但是之后:
my $list = [[1,2,3],[[4,5],6,7]];
say $list.deepmap( *² ); # [[1 4 9] [[16 25] 36 49]]
say $list.duckmap( *² ); # [9 9]
Run Code Online (Sandbox Code Playgroud)
deepmap的表现与预期相似,但我无法理解duckmap正在做什么.这个问题与perl6/doc中的这个问题有关.它可以通过"它们无法更加不同"来解决,但我想找到一些例子,他们也会这样做,当他们不这样做时,试着去了解真正发生的事情.
recursion functional-programming duck-typing perl6 map-function
我希望能够map在Swift中使用Swift 来修改我的对象数组,而不需要遍历每个元素.
在此之前能够做到这样的事情(这里有更多细节描述:
gnomes = gnomes.map { (var gnome: Gnome) -> Gnome in
gnome.age = 140
return gnome
}
Run Code Online (Sandbox Code Playgroud)
感谢Erica Sadun和其他人,新提案已经完成,我们现在正在摆脱C风格的循环并var在循环中使用.
在我的情况下,我首先得到一个警告,以删除varin然后一个错误我gnome是一个常数(自然)
我的问题是:我们如何更改一个map或新的样式循环中的数组,以便为Swift 3.0做好充分的准备?
map-function ×10
python ×5
arrays ×1
duck-typing ×1
filter ×1
fold ×1
iterable ×1
iterator ×1
java ×1
java-8 ×1
java-stream ×1
list ×1
pandas ×1
perl6 ×1
recursion ×1
reverse ×1
rust ×1
rust-result ×1
scheme ×1
swift ×1