0

我想创建一个函数,该函数将列表作为输入并返回列表元素之间的整数、实数和复数之和。作为列表的元素,除整数、实数和复数之外的数据类型对象在计算总和时被排除在外。

所以我这样写代码

def number_sum(lst):
    total = 0
    for e in lst:
        if type(e) == int or type(e) == float or type(e) == complex:
            total += e
    return total

x1 = [1, 3, 5, 7, 9]                     # 25
x2 = ["abc", [3, 5], 3.5, 2+3j, 4.5, 10] # 20 + 3j
x3 = []                                  # 0

print(number_sum(x1))
print(number_sum(x2))
print(number_sum(x3))

但我希望我可以在输入中获取 x1、x2、x3 列表。我该如何解决?

4

2 回答 2

3

用于numbers.Number检查值是否为数字。从文档中:

数字层次结构的根。如果您只想检查参数 x 是否为数字,而不关心是什么类型,请使用 isinstance(x, Number)。

代码

import numbers


def number_sum(lst):
    def get_numbers(l):
        """Generator that returns a flatten view a list"""
        for e in l:
            if isinstance(e, numbers.Number):
                yield e
            elif isinstance(e, (tuple, list)):
                yield from get_numbers(e)

    return sum(get_numbers(lst))


x1 = [1, 3, 5, 7, 9]
x2 = ["abc", [3, 5], 3.5, 2 + 3j, 4.5, 10]

print(number_sum(x1))
print(number_sum(x2))

输出

25
(28+3j)

请注意,该函数get_numbers是一个生成器,它使用yieldyield from来展平和过滤嵌套列表。然后将结果get_numbers传递给内置函数sum以对数字进行实际求和。

于 2021-10-26T07:27:24.660 回答
-3

您可以使用x = input("Enter the List: "),以便用户可以在一行中输入列表。
导入 ast
如果您希望用户以 [1,2,3] 形式输入列表,则使用
import ast
x = input()
x = ast.literal_eval(x).
这会将字符串变成一个列表。
最后,您的代码将如下所示:

import ast

x = input("Enter the List: ")
x = ast.literal_eval(x)

然后,执行您想要执行的必要功能
感谢@Matthis 和@S3DEV 的改进建议改进

于 2021-10-26T07:21:23.970 回答