python中的函数,它将返回仅截断的整数列表

时间:2018-03-19 23:54:03

标签: python

所以我正在处理一个类中的代码,我有一个问题,我的老师要我:"编写一个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内置的库函数。

感谢任何帮助。感谢

3 个答案:

答案 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]
  1. 我们有一个您为列表提到的数字的sample_list。
  2. 我们创建一个迭代列表中每个项目的函数,然后创建一个名为(sample_list)的参数。我们调用函数时传递的arg将是我们创建的sample_list。
  3. 我们创建一个名为new list的空列表,用于存储sample_list中每个值的整数版本。
  4. 我们运行一个for循环,迭代sample_list中的每个数字,我们将创建一个名为num的变量,它将存储该特定数字的整数值。然后,我们将该整数值附加到new_list,然后返回新列表。
  5. 然后我们调用该函数。在这种情况下,我打印输出以确保我得到了正确的输出,但是当你调用该函数时你不必打印。