python中没有语句的数字(if、else、while、for)

2024-09-29 00:12:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要找到一种方法,将一个多倍数字串拆分为这些数字的多倍字符串,然后再次拆分为单个数字,这将允许我测试这些第一次输入的数字,看看它们是否是harshad数字,而不使用for、else、while和if

到目前为止,我能够拆分输入字符串:

a=输入(“由a分隔的多个数字:”)

a.拆分(“,”)

然后我需要再次拆分,我想我需要使用map函数。你知道怎么进一步吗


Tags: 方法函数字符串mapforif数字else
1条回答
网友
1楼 · 发布于 2024-09-29 00:12:31

python内置的函数映射过滤器减少将成为您在更具功能性的风格中工作时的朋友

地图

通过map函数,您可以将iterable(列表、元组等)中的每个项传递给函数,并将返回值用作新的可迭代*中的新值,从而转换iterable中的每个项。 非功能性方法将使用for ... in构造:

numbers_as_strings = ["1", "12", "13"]
numbers_as_ints = []
for number in numbers_as_strings:
  numbers_as_ints.append(int(number))

或者更简洁地说是一个列表

numbers_as_ints =[int(number) for number in numbers_as_strings]

既然你避开了for,还有另一种方法

numbers_as_ints = map(int, numbers_as_strings)

但您不只是希望字符串映射到整数,还需要测试它们的严酷性。既然我们在做函数式的事情,我们就创建一个函数来为我们做这件事

def is_harshad(number_as_string):
  return # do your harshad test here

然后你可以通过这个函数映射你的数字

list(map(is_harshad, numbers_as_string))  # wrap in list() to resolve the returned map object.
>>> [True, True, False]

但也许你想把结果作为一系列苛刻的数字字符串?很好地检出过滤器

过滤器

filter函数允许您从iterable中选择要保留在新iterable中的项。您给它一个函数,该函数对单个项目进行操作,并为保管者返回True,为拒绝返回False。您还为它提供了一系列要测试的项目

实现这一点的非功能性方法是使用for循环

harshady_numbers = []
for number in numbers_as_strings:
  if is_harshad(number):
    harshady_numbers.append(number)

或者更简洁、更贴切地列出一份清单

harshady_numbers = [number for number in numbers_as_strings if is_harshady(number)]

但是,由于我们的功能得到了充分利用filter

harshady_numbers = filter(is_harshady, numbers_as_strings)

就这样。用同样的函数思维来完成is_harshad函数,你就完成了

    • map()可以接受多个iterable参数,它返回的是迭代器而不是列表

相关问题 更多 >