白衣非少年
波浪号操作是 numpy 的一部分,是 numpy.invert 的快捷方式。通过使用列表理解,是一个Python列表,它不支持此操作。flag_good例如,您可以将列表转换为 Numpy 数组,然后使用 invert 函数。flag_good>>> flag_bad = ~np.array(flag_good)>>> flag_badarray([False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, True, False, False, False, False, False, True, False, False, False, False, False])或者,您可以使用矢量化并直接返回Numpy数组,其中函数按元素调用,而不是使用列表推导。>>> flag_good = np.vectorize(lambda x: x.isdigit())(arr2)>>> flag_bad = ~flag_good>>> flag_badarray([False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, True, False, False, False, False, False, True, False, False, False, False, False])
慕哥9229398
我觉得你可以从一开始就解决问题,编辑你的列表理解。flag_bad = [not(element.isdigit()) for element in arr2]不过,为了回答你的问题,我会这样做:import numpy as npinput_list = [1,2,3,1,5,2,3,4,2, 4,1,3,4,1,2,5,3,2, 1,"?",1,"n",3,2,5, 1,2,"Nan",3,2,2,4,3]# calculate the medianmedian = int(np.median([elt for elt in input_list if type(elt) is int])) # replace elements of the list only if you have a non-int output_array = np.array([elt if type(elt) is int else median for elt in input_list])print(output_array)输出:[1 2 3 1 5 2 3 4 2 4 1 3 4 1 2 5 3 2 1 2 1 2 3 2 5 1 2 2 3 2 2 4 3]