2024-05-01 22:00:40 发布
网友
为什么这个代码不起作用?尝试获取值==键的项的返回
L=[0,2,2,1,5,5,6,10] x=dict(enumerate(L)) y=(filter(x.keys()==x.values(), x.items())) print(list(y))
^{}方法返回所有键的视图。你知道吗
^{}方法返回所有值的视图。你知道吗
因此,x.keys()==x.values()询问所有键是否等于所有值,这当然不是真的。你知道吗
x.keys()==x.values()
另外,filter需要一个函数。但你并不是给它传递一个函数,你只是给它传递x.keys()==x.values(),或者False的结果。要将其转换为函数,需要使用def或lambda来创建新函数。你知道吗
filter
False
def
lambda
要创建的函数是一个接受项的函数,如果键等于值,则返回true。由于项只是一个包含该项的键和值的2元素元组,因此要检查该项的函数是:
y = filter((lambda item: item[0] == item[1]), x.items())
或者,如果这有点让人困惑,不要尝试内联编写;只需将它分开def:
def key_equals_value(item): key, value = item return key == value y = filter(key_equals_value, x.items())
然而,这是相当笨拙的;把它写成理解比filter调用要容易得多:
y = ((key, value) for (key, value) in x.items() if key == value)
一般来说,当您还没有传递给filter或map的函数,并且必须用def或lambda创建一个函数时,理解通常更具可读性,因为您可以直接编写表达式。你知道吗
map
如果你想要一个列表而不是一个生成器,你可以理解一下,只要把paren改成方括号:
y = [(key, value) for (key, value) in x.items() if key == value]
如果只需要值,而不需要键值对:
y = [value for (key, value) in x.items() if key == value]
如果你发现自己被理解搞糊涂了,它们总是可以转换成嵌套语句,在底部有一个append。最后一个等于:
append
y = [] for key, value in x.items(): if key == value: y.append(value)
而且,您一开始并不需要dict;您只需要遍历索引、值对。所以:
y = [value for (index, value) in enumerate(L) if index == value]
^{} 方法返回所有键的视图。你知道吗
^{} 方法返回所有值的视图。你知道吗
因此,
x.keys()==x.values()
询问所有键是否等于所有值,这当然不是真的。你知道吗另外,
filter
需要一个函数。但你并不是给它传递一个函数,你只是给它传递x.keys()==x.values()
,或者False
的结果。要将其转换为函数,需要使用def
或lambda
来创建新函数。你知道吗要创建的函数是一个接受项的函数,如果键等于值,则返回true。由于项只是一个包含该项的键和值的2元素元组,因此要检查该项的函数是:
或者,如果这有点让人困惑,不要尝试内联编写;只需将它分开
def
:然而,这是相当笨拙的;把它写成理解比
filter
调用要容易得多:一般来说,当您还没有传递给
filter
或map
的函数,并且必须用def
或lambda
创建一个函数时,理解通常更具可读性,因为您可以直接编写表达式。你知道吗如果你想要一个列表而不是一个生成器,你可以理解一下,只要把paren改成方括号:
如果只需要值,而不需要键值对:
如果你发现自己被理解搞糊涂了,它们总是可以转换成嵌套语句,在底部有一个
append
。最后一个等于:而且,您一开始并不需要dict;您只需要遍历索引、值对。所以:
相关问题 更多 >
编程相关推荐