有没有办法在列表中实现非懒惰的从左到右调用操作python?
例如 scala
val a = ((1 to 50)
.map(_ * 4)
.filter( _ <= 170)
.filter(_.toString.length == 2)
.filter (_ % 20 == 0)
.zipWithIndex
.map{ case(x,n) => s"Result[$n]=$x"}
.mkString(" .. "))
a: String = Result[0]=20 .. Result[1]=40 .. Result[2]=60 .. Result[3]=80
Run Code Online (Sandbox Code Playgroud)
虽然我意识到许多人不喜欢上面的语法,但我喜欢从左到右移动并随时添加任意操作的能力.
for当有三个或更多操作时,python 理解是不容易阅读的.结果似乎是我们需要将所有内容分解成块.
[f(a) for a in g(b) for b in h(c) for ..]
Run Code Online (Sandbox Code Playgroud)
有没有机会提到这种方法?
注意:我尝试了一些库,包括toolz.functoolz.python3懒惰的评估很复杂:每个级别返回一个map对象.此外,它不能显示它可以在输入上操作list.
我有一个清单。
mapper = {"a": 9, "b": 7}
A = ["a", "b"]
Run Code Online (Sandbox Code Playgroud)
我想得到:
result = [9, 7]
Run Code Online (Sandbox Code Playgroud)
我知道有多种方法可以实现这一目标,例如:
result = [mapper[char] for char in A]
result = list(map(lambda x: mapper[x], A))
Run Code Online (Sandbox Code Playgroud)
对于第二种方式,我们可以使用operator模块而不是使用 lambda 吗?
我找到了一个名为 的方法operator.getitem(),我尝试使用
result = list(map(operator.getitem(mapper), A))
Run Code Online (Sandbox Code Playgroud)
但这会引发异常。
我知道list(map(lambda x: operator.getitem(mapper, x), A))会起作用,但我只想避免使用lambda.
我找到了这个问题,但我没有找到解决方案。