python与JavaScript';一些?

python与JavaScript';一些?,javascript,python,arrays,Javascript,Python,Arrays,python是否与JavaScript/有任何等价物 简单的JavaScript示例: var arr = [ "a", "b", "c" ]; arr.some(function (element, index) { console.log("index: " + index + ", element: " + element) if(element === "b"){ return true; } }); 将输出: index: 0, element

python是否与JavaScript/有任何等价物

简单的JavaScript示例:

var arr = [ "a", "b", "c" ];
arr.some(function (element, index) {
    console.log("index: " + index + ", element: " + element)
    if(element === "b"){
        return true;
    }
});
将输出:

index: 0, element: a
index: 1, element: b
下面的python在功能上似乎是等效的,但我不知道是否有更“pythonic”的方法

arr = [ "a", "b", "c" ]
for index, element in enumerate(arr):
    print("index: %i, element: %s" % (index, element))
    if element == "b":
        break
Python有
all(iterable)
any(iterable)
。因此,如果您制作了一个生成器或迭代器来实现您想要的功能,您可以使用这些函数对其进行测试。例如:

some_is_b = any(x == 'b' for x in ary)
all_are_b = all(x == 'b' for x in ary)
它们实际上是由它们的代码等价物在中定义的。这看起来熟悉吗

def any(iterable):
    for element in iterable:
        if element:
            return True
    return False
没有,但标准python列表没有。即使如此,numpy数组实现也不是您所期望的:它们不接受谓词,而是通过将它们转换为布尔值来计算每个元素

< > > >编辑< /强>:<代码>任何< /代码>和<>代码>所有作为函数(不作为方法)存在,但它们不应用谓词,而是将Booaln化值视为NUMPY方法。

在Python中,一些可以是:

def some(list_, pred):
    return bool([i for i in list_ if pred(i)])

#or a more efficient approach, which doesn't build a new list
def some(list_, pred):
    return any(pred(i) for i in list_) #booleanize the values, and pass them to any
您可以实现每个:

def every(list_, pred):
    return all(pred(i) for i in list_)
编辑:哑样本:

every(['a', 'b', 'c'], lambda e: e == 'b')
some(['a', 'b', 'c'], lambda e: e == 'b')
你自己试试看

numbers = [1, 2, 3, 4, 5, 6, 7, 8]
def callback( n ):
    return (n % 2 == 0)

# 1) Demonstrates how list() works with an iterable
isEvenList = list( callback(n) for n in numbers)
print(isEvenList)

# 2) Demonstrates how any() works with an iterable
anyEvenNumbers = any( callback(n) for n in numbers)
print(anyEvenNumbers)

# 3) Demonstrates how all() works with an iterable
allEvenNumbers = all( callback(n) for n in numbers)
print(allEvenNumbers)
  • list()接受任何iterable,返回另一个列表:
  • any():在布尔值列表中只需要一个True,返回一个布尔值:
  • all():需要布尔值列表中的所有真值,返回布尔值:

  • 请解释你的代码是做什么的,以及它是如何做到的。
    isEvenList = list(callback(n) for n in numbers)
    print(isEvenList)
    #[False, True, False, True, False, True, False, True]
    
    anyEvenNumbers = any( callback(n) for n in numbers)
    print(anyEvenNumbers)
    #True
    
    allEvenNumbers = all( callback(n) for n in numbers)
    print(allEvenNumbers)
    #False