所以我正在处理一个类中的代码,我有一个问题,我的老师要我:"编写一个Python函数,将一个数字列表作为参数(列表可以是混合列表),并返回一个新列表,该列表由原始列表的整数值(在浮点数的情况下被截断)组成。例如。列表[5,6.4,7.5,8.8,2,2.1]返回[5,6,7,8,2,2]"
我已经开始了这个功能,但我仍然坚持认为列表中的值是int还是float ...这就是我所拥有的:
def int_list(a_list):
for x in a_list:
if x = int:
我不认为我们可以在不说类型(x)的情况下询问x是int还是float,但我认为我的老师不希望我们使用任何Python内置的库函数。
感谢任何帮助。感谢
答案 0 :(得分:2)
你不需要一个功能。改为使用列表理解:
>>> list = [5, 6.4, 7.5, 8.8, 2, 2.1]
>>> nl = [int(x) for x in list]
>>> nl
[5, 6, 7, 8, 2, 2]
您可以将列表推导视为应用于其所有元素的函数:
>>> def process_list(a_list, a_func):
... new_list = []
... for x in a_list:
... new_list.append(a_func(x))
... return new_list
...
>>> process_list(list,int)
[5, 6, 7, 8, 2, 2]
但正如你所看到的,列表理解会自行完成很多这样的事情,你只需提供一个将每个值转换为新值的函数。
(从技术上讲,你甚至不会拥有来处理原始值。列表将针对每个元素进行迭代,并且每个元素都会调用该函数,但是函数实际上与它无关。不管是Python的关注点。)
答案 1 :(得分:1)
您可以执行以下操作:
if isinstance(x, float):
x = int(x)
或者,如果你想避免使用库函数,你可以这样做:
if x % 1 != 0:
x = int(x)
例如:尝试执行print(5.5%1)
和print(5%1)
。
或者,如果保证值为数字,您只需使用x = int(x)
即可。否则,您可以使用try,catch来处理异常。
答案 2 :(得分:0)
sample_list = [5, 6.4, 7.5, 8.8, 2, 2.1]
def iterate_list(sample_list):
new_list = []
for num in sample_list:
num = int(num)
new_list.append(num)
return new_list
print(iterate_list(sample_list))
您的输出将是:
[5, 6, 7, 8, 2, 2]