使用嵌套数组操作实现算法通常很有用.例如,要查找列表中以每个给定字符开头的单词数,您可以在Python中执行以下操作:
>>> a = ["foo","bar","baz"]
>>> map(lambda c: len(filter(lambda w: w.startswith(c), a)), ('a','b','c','d','e','f'))
[0, 2, 0, 0, 0, 1]
Run Code Online (Sandbox Code Playgroud)
在表达式中w.startswith(c),区分两个循环迭代变量w并且c因为它们具有不同的名称是微不足道的.
在Perl中,我想做这样的事情:
@a = ("foo", "bar", "baz");
map length(grep $_ =~ /^$_/, @a), ('a','b','c','d','e','f')
Run Code Online (Sandbox Code Playgroud)
然而,这个问题的明显问题$_是仅涉及最里面的 grep迭代变量(适用于$_左侧),而不是外部的map(适用于/^$_/).在Perl中避免此问题的惯用方法是什么?
Hyn*_*dil 21
只需分配给局部变量:
@a = qw(foo bar baz);
map {my $ch = $_; scalar grep $_ =~ /^$ch/, @a} qw(a b c d e f)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3658 次 |
| 最近记录: |