Python Lambda的用法 & 題目示範
本題目是由Check.io中的Nearest Value來做示範:
Qusetion:
Find the nearest value to the given one.
You are given a list of values as set form and a value for which you need to find the nearest one.
For example, we have the following set of numbers: 4, 7, 10, 11, 12, 17, and we need to find the nearest value to the number 9. If we sort this set in the ascending order, then to the left of number 9 will be number 7 and to the right — will be number 10. But 10 is closer than 7, which means that the correct answer is 10.
A few clarifications:
If 2 numbers are at the same distance, you need to choose the smallest one;
The set of numbers is always non-empty, i.e. the size is >=1;
The given value can be in this set, which means that it’s the answer;
The set can contain both positive and negative numbers, but they are always integers;
The set isn’t sorted and consists of unique numbers.
Input: Two arguments. A list of values in the set form. The sought value is an int.
Output: Int.
Example:
nearest_value({4, 7, 10, 11, 12, 17}, 9) == 10
nearest_value({4, 7, 10, 11, 12, 17}, 8) == 7
Question 理解:找出數值差最小的值,如果有相同差距的數字,要選原本數字較小的為答案。
Solution 1:
使用lambda相減完後,再利用range(len())的方法製造出index,藉此快速傳回原值。
因為可能會有數值相差相同的問題,所以要先sort過原本的list,藉此達到題目要求。
Solution 2 :⭐️
使用lambda並作出tuple,藉此解決如果有相減後的差相同,導致無法選出正確答案的,因為如果(abs(x-one),x))減完之後前面相同,就會自動往第二個值比。
Reference:
https://py.checkio.org/mission/nearest-value/solve/
https://www.geeksforgeeks.org/python-find-closest-number-to-k-in-given-list/