map和filter都可以使用列表理解实现:
map f xs = [f x | x <- xs]
filter p xs = [x | x <- xs, p x]
我想用下面的例子来说明逆流也是成立的:
[expr | p <- s]
到目前为止:
map (\p -> expr) s
但是,只有当与p的模式匹配在s的所有元素上成功时,这才有效。在某种程度上,我首先希望使用s上的模式匹配来过滤p。当然,我试着研究这个问题,但我没有找到一个没有使用列表理解或LambdaCase的解决方案。
我开始学习Haskell,结果是,在那里,您可以将列表理解作为部分应用的功能。换句话说,它返回一个接受列表的函数,然后在列表上运行列表理解。
示例:
boomBangs xs = [ if x < 10 then "BOOM!" else "BANG!" | x <- xs, odd x]
boomBangs can then be called with the actual "xs" argument.
我的问题是:在Python中有什么方法可以做到吗?我到处找遍了,找不到路,但我可能漏掉了什么。
这将是非常有价值的能够做到。
我想迭代两个列表。第一个列表包含一些浏览器用户代理,第二个列表包含这些浏览器的版本。我只想过滤掉那些版本大于60的用户代理。
下面是我的列表理解的样子:
[link for ver in version for link in useragents if ver > 60]
这个列表的问题是它多次打印相同的用户代理。我使用zip函数编写了以下代码,这个函数工作得很好:
for link, ver in zip(useragents, version):
if ver > 60:
# append to list
print(link)
为什么
我正在读Haskell的书“向你学习Haskell for Great Good!”第2章用这个小例子来解释列表理解:
boomBangs xs = [ if x < 10 then "BOOM!" else "BANG!" | x <- xs, odd x]
有人可以用Scala重写这个列表理解吗?Scala没有偶数或奇数函数?所以我必须使用
x%2!=0
检查数字是否为奇数?
提前感谢您的优雅解决方案!
我想这样做:
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()函数编写此代码?这些列表的长度不相等,
如何使用map和filter编写语句以获得与以下列表理解表达式相同的结果:
[(x,y) for x in range(10) if x%5==0
for y in range(10) if y%5==1]
结果:
[(0, 1), (0, 6), (5, 1), (5, 6)]
我知道这似乎毫无意义,但我真的很好奇
如何修改下面的代码以使用filters ()而不使用列表理解找到最大的数字?
test_list = [2,3,5,6,8,9,10,16,17,]
k = 5
print ("The list : " + str(test_list))
count = len([i for i in test_list if i > k])
print ("The numbers greater than 5 : " + str(count))
我想使用map和/或filter函数来编写此代码。它返回列表中项目的索引,只要总和达到目标 我对此使用了列表理解,但不知道如何将第二个for循环放入map/filter函数中。如果我为map/filter函数的函数参数定义自己的函数,我不确定要使用的语法 num = [2,5,7,11,6,15,3,4]
tgt= 9
[num.index(x) for x in num for y in num if x + y == tgt] 结果: [0, 1, 2, 4, 6, 7]
我正在手动将这段Java代码转换为C#:
private static final List<BigInteger> PRIMES = Arrays.asList(new BigInteger[]
{ new BigInteger("10007"), new BigInteger("10009"),
new BigInteger("10037"), new BigInteger("10039")});
Iterator<BigInteger> primes = PRIMES.itera
我想知道在python list上有没有python的方式来执行下面的操作。输入是:一个大的python列表demo = [1,3,5,...],一个输入索引列表索引,如[0,1]或[2,3,5]等。带有索引的demo = [1,3,5,6]的预期输出将是过滤掉索引列表中的值的[5,6]。
我能想到的一种方法是: python列表理解,像[demo[i] for i in index]一样,给出相反的[1,3],并转换demo和[1,3]来设置和应用设置差异。
我想知道更好的解决方案和更好的性能。
我很好奇是否有可能使用map()函数做一些我可以通过列表理解来做的事情。
对于ex,请使用以下列表comp:
example_list = [x*2 for x in range(5) if x*2/6. != 1]
显然,这给了我0,2,4,8。
如何使用map()函数创建等效项?这样做会给我一个语法错误。
example_map = map(lambda x:x*2 if x*2/6. != 1, range(5))
我只是想更好地理解如何使用这个函数。
这似乎是一个简单的问题,但我还没有搞清楚,也找不到答案。
在一行中,如何在两个不同的列表上使用两个相同的列表理解,并将结果作为两个单独的列表返回?
我试着这样做:
listx = [x for x in listx if x != None]
listy = [y for y in listy if y != None]
有没有办法在一条线上做到这一点?也许使用map()或列表理解?
我在理解Python中的列表理解语法时遇到了一些麻烦,所以我开始思考如何在Perl中实现同样的功能,因为我更熟悉Perl。我意识到,基本的示例(取自)都可以用map或grep在Perl中完成。
例如。
(python) (perl)
S = [x**2 for x in range(10)] @S = map { $_**2 } ( 0..9 );
V = [2**i for i in range(13)] @V = map { 2**$_ } ( 0..12 );
M = [x
使用,我如何执行以下操作?
for (i = 1; i < max; i+=2) {
// Do something
}
在Python中,for-in控制流语句有一个可选的step值:
for i in range(1, max, 2):
# Do something
但Swift range运算符似乎没有对应的运算符:
for i in 1..<max {
// Do something
}
请看下面的代码:
val a = List(1,2,3,4,5)
a.filter(_ >= 3).map(_ * 9).drop(1).take(2)
我的理解是,它对每个操作迭代一次列表,生成类似于以下内容的代码:
for(i <- a) {
// filter
}
for (i <- afiltered) {
// map
}
for (i <- afilteredandmapped) {
// drop
}
..etc
是否存在将这些操作组合在一起的操作,其中的链接操作只在列表中迭代一次?产生的情况如下:
for (i <- a) {
我今天一直在思考这一点,我有一种纠结的感觉,这是一件很容易实现的事情,今天我只是摆脱了它,但不管怎样,它就在这里。
而不是执行像这样的操作
// assume that I have a populated string[] myString
for (int i = 0; i < myString.Length; i++) {
myString[i] = myString[i].Equals(string.Empty) ? "foo" : "bar;
}
我想做一些像PHP的,它(我认为)会比显式迭代执行得更快。
C#有这种操作的能力吗?
对于nodejs/javascript,有类似于pythons列表理解的东西吗?如果没有,那么是否可以创建一个具有类似行为的函数,例如
# Example 1
list_one = [[1, 2], [3, 4], [5, 6], [7, 8]]
someOfList = sum(x[1] for x in list_one)
print(someOfList) # prints 20
# Example 2
combined = "".join([str( ( int(x) + int(y) ) % 10) for x, y in zip("9999",
我正在实现一个宏来做列表理解
(define-syntax list-comp
(syntax-rules (for in if)
[(list-comp <expr> for <var> in <list>)
(map (lambda (<var>) <expr>) <list>)]
[(list-comp <expr> for <var> in <list> if <cond>)
(map (lambda (<var>)
当我试图学习Haskell时,我正在尝试做一个haskell问题。
这个问题给了我以下类型定义:
type Word = String
type Line = [Word]
type Book = [Line]
然后,问题要求我定义一个函数-> ::Word Int book Int,它接受一个单词和一本书,并返回单词出现在其上的行号。例如:
index "example" [["example", "town"], ["example", "cat", "this"]] = [1,2]
到目
我对Haskell相对来说是个新手,所以如果我的问题听起来很愚蠢的话,我很抱歉。我一直在努力理解功能组合是如何工作的,我遇到了一个问题,我想有人能帮我解决这个问题。在以下两种场景中,我在函数组合中使用map:
map (*2) . filter even [1,2,3,4]map (*2) . zipWith max [1,2] [4,5]
虽然筛选器和zipWith函数都返回一个列表,但只有第一个组合工作,而第二个组合引发以下错误:
"Couldn't match expected type '[Int] -> [Int]' with actual ty