Python编程取列表中的元素

假设有一个列表[0,1,2,3,4,5,6,7,8,9]
我想取在3.5距离最小的两个值输出

熟悉numpy的话,可以这样写:

>>> import numpy as np
>>> data = np.array([0,1,2,3,4,5,6,7,8,9])
>>> data[np.argsort(np.abs(data-3.5))[:2]]
array([3, 4])

一种思路:
递增排序,找到大于 target 的列表,选首元素。
递减排序,找到小于 target 的列表,选尾元素。

img

能讲具体一点吗

a = [i for i in range(10)]
target = 3.5 
#思路 获取距离合并成tuple,再根据tuple的第二个元素距离值排序,选择前2个tuple,返回tuple第一个元素,也就是原来的数值
result = [key[0] for key in  sorted([(item,abs(item-target)) for item in a],key=lambda x:x[1])[:2] ]
print(result)

img


def takeSecond(elem):
    return elem[1]

list1 = [0, 2, 4, 5, 19, 18, 17]
a = 3.2
kk = [(x, abs(i-a)) for x, i in enumerate(list1)]
kk.sort(key=takeSecond)
min_value = [list1[i[0]] for i in kk[:2]]

print(min_value)


# 我理解的是值离3.5的距离最小,就是按照跟3.5的差的绝对值进行排序即可
list1 = [0,1,2,3,4,5,6,7,8,9]
twoNums = sorted(list1,key=lambda x:abs(x-3.5))[:2]
print("距离最小的两个值: {},{}".format(twoNums[0],twoNums[1]))

如果觉得答案对你有帮助,请点击下采纳,谢谢~

一看就知道你是个好学的人。

解题思路:

  1. 将目标值与列表中的值,挨个进行 绝对值减法运算,并保存为 元祖(差值,原数值)
  2. 将所有上述的元祖保存到列表中,排序,即可

代码如下:

nums = [1, 2, 3, 4, 5, 6, 7, 8, 9]
tag = 3.5

# 计算差值列表,并保存差值和对应数值的元祖: list[tuple(),tuple(),tuple(),]
cha_list = []
cha_tuple = tuple()  
for n in nums:
    cha_list.append((abs(n-tag), n))

print(cha_list)

# 将差值数组按照第一个字段排序即可
cha_list.sort()
print(cha_list)

# 取前两个即
print(cha_list[0][1])
print(cha_list[1][1])
[(2.5, 1), (1.5, 2), (0.5, 3), (0.5, 4), (1.5, 5), (2.5, 6), (3.5, 7), (4.5, 8), (5.5, 9)]
[(0.5, 3), (0.5, 4), (1.5, 2), (1.5, 5), (2.5, 1), (2.5, 6), (3.5, 7), (4.5, 8), (5.5, 9)]
3
4

打字不易,忘珍惜