我需要根据自己的需要编辑代码,但是很遗憾,我没有选择从零重写,所以我必须了解这是什么,因为截止日期为11小时。阻止大三找到工作
if text and segment:
if "Office" in segment:
if True in list(map(lambda x: x in text, _classes[_classB][0])):
return "Класс Б"
if "Warehouse" in segment:
if True in list(map(lambda x: x in text, _classes[_classB][0])) or \
True in list(map(lambda x: x in text and True in [w not in text for w in _classes[_classA][0]],
_classes[_classB][1])):
return "Class B"
return ""
return ""
请您说明到底是什么
True in list(map(lambda x: x in text and True in [w not in text for w in _classes[_classA][0]],_classes[_classB][1])):
还是“ unlambda”之类的东西?非常感谢
UPD:我需要添加一条规则:“如果土地面积> 9000,则...”,其中另一列的土地面积”
答案 0 :(得分:5)
好的,所以首先让我们重新格式化它以获得更好的观点:
True in list(map(
lambda x: (
x in text
and True in [
w not in text
for w in _classes[_classA][0]
],
_classes[_classB][1]
))
它看起来仍然很疯狂,但是幸运的是我们可以进一步简化:
in
和not in
将给出True
或False
,但是我们可以不用True in ...
,而可以any(...)
,[...]
独立于外部地图,因此我们可以对其进行重构,x in text
和随后的w
条件已进行and
,因此我们可以将前面的w
条件拉到快捷方式以防{{1} } 因此我们获得:
False
基本上,这似乎可以检查w_condition = any(w not in text for w in _classes[_classA][0])
result = w_condition and any(x in text for x in _classes[_classB][1])
是否包含text
的全部和至少_classes[_classA][0]
中的一个。为什么这样做取决于您的判断。
答案 1 :(得分:3)
True in list(map(lambda x: x in text and True in [w not in text for w in _classes[_classA][0]],_classes[_classB][1])):
这绝对是一场噩梦,所以让我们分解一下。
True in list(map(...))
map()
函数将基于某些转换函数和输入返回对象的映射。 list()
会将其转换为列表。
lambda x: x in text and True in [w not in text for w in _classes[_classA][0]],_classes[_classB][1]
我们可以取出lambda并将其转换为函数:
# globals variables to make our lives easier. Bad practice but obviously they don't
# care about that.
text = ...
_classes = ...
def mylambda(x):
"""
Checks that x exists in text and some class doesn't appear in text.
"""
classA0 = _classes[_classA][0]
classInText= w not in text for w in classA0
return x in text and True in classInText
现在,我们可以简化它:
list(map(mylambda, _classes[_classB][1])):
此语句将返回布尔值列表。
True in list(map(mylambda, _classes[_classB][1])):
如果对于_classes[_classB][1]
中的任何值,该值存在于text
中,而_classes[_classA][0]
中的某个值在text
中不存在,则返回True。 / p>
现在结束了,请刻录此代码,不再赘述。
答案 2 :(得分:0)
以下行:
True in list(map(lambda x: x in text and True in [w not in text for w in _classes[_classA][0]],_classes[_classB][1])):
# do smth
可以改写为:
array2 = []
for x in _classes[_classB][1]:
array1 = []
for w in _classes[_classA][0]:
if w not in text:
array1.append(True)
else
array1.append(False)
if x in text and True in array1:
array2.append(True)
else:
array2.append(False)
if True in array2:
# do smth
可以变成:
condition1Met = False
for x in _classes[_classB][1]:
condition2Met = False
for w in _classes[_classA][0]:
if w not in text:
condition2Met = True
break
if x in text and condition2Met:
condition1Met = True
break
if condition1Met:
# do smth
由于我不了解您的情况,因此我不可能更好地命名变量,但我希望这更易于管理。