[英]Mapping list to list in python
在下面编写一个名为compute的函数:
或者,如果它是另一种值,则返回值None(不是字符串“ None”)。>>我对此有疑问,不确定如何返回None吗?
def compute(value): if type(value) == int or type(value) == float: x = value **2 if type(value) == str: x = value[::-1] else: return None return x compute(['x'])
另外,如何使用地图功能以单行形式将值作为列表(而不是map_object)返回?
例如返回以下内容:
map_compute(['crew', '321', 12, ['x'], True])
至 :
['werc', '123', 144, None, None]
您应该使用此代码。 在此代码中,我们将示例列表与函数compute映射。
在Map函数中,迭代“示例”列表并一个接一个地迭代,列表中的迭代值将调用函数“ compute(value)”并获取返回值。 最后,我们将地图对象转换为列表。
def compute(value):
print(type(value), value)
if type(value) == int or type(value) == float:
x = value **2
elif type(value) == str:
x = value[::-1]
else:
return None
return x
example = ['crew', '321', 12, ['x'], True]
map_output = list(map(compute, example))
print(map_output)
输出:
['werc', '123', 144, None, None]
由于类型int
/ float
和str
是不相交的,可以使用elif
跳过评估这确保了第二块else
逻辑地连接到顶端if
。 问题在于,如果第一个if
块执行,则else: return None
将在到达预期的return x
之前执行,因为它仅取决于if type(value) == str:
块的真值。
我总是在if
块上方添加一个空行,以直观地显示它们在逻辑上与上面的任何内容分开。
中间值x
是不必要的。 此外,如果您未指定返回类型,Python将返回None
。
使用map
函数将compute
等功能应用于列表中的每个元素。 map
返回一个迭代器,因此如果您不打算直接对其进行迭代,则需要将其转换为要打印的list
。
def compute(value):
if type(value) == int or type(value) == float:
return value ** 2
elif type(value) == str:
return value[::-1]
print(list(map(compute, ['crew', '321', 12, ['x'], True])))
结果:
['werc', '123', 144, None, None]
您还可以使用列表推导来执行映射操作:
print([compute(x) for x in ['crew', '321', 12, ['x'], True]])
在除映射之外还需要过滤或易于内联映射操作的情况下,这通常比map
函数更可取。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.