>source

다음과 같은 변수가 있습니다. my_value = 188 다음과 같은 목록이 있습니다.

my_list = [
    ['Morocco', 'Meat', '190,00', '0,15'], 
    ['Morocco', 'Meat', '189,90', '0,32'], 
    ['Morocco', 'Meat', '189,38', '0,44'],
    ['Morocco', 'Meat', '188,94', '0,60'],
    ['Morocco', 'Meat', '188,49', '0,78'],
    ['Morocco', 'Meat', '187,99', '0,101'],
    ['Spain', 'Meat', '190,76', '0,10'], 
    ['Spain', 'Meat', '190,16', '0,20'], 
    ['Spain', 'Meat', '189,56', '0,35'],
    ['Spain', 'Meat', '189,01', '0,40'],
    ['Spain', 'Meat', '188,13', '0,75'],
    ['Spain', 'Meat', '187,95', '0,85'],
    ['Italy', 'Meat', '190,20', '0,11'],
    ['Italy', 'Meat', '190,10', '0,31'], 
    ['Italy', 'Meat', '189,32', '0,45'],
    ['Italy', 'Meat', '188,61', '0,67'],
    ['Italy', 'Meat', '188,01', '0,72'],
    ['Italy', 'Meat', '187,36', '0,80']]

보시다시피 my_list 색인의 숫자 [2] 인덱스의 숫자는 내림차순입니다. [3] 오름차순입니다. 이제 모든 목록에 대해 어떤 색인에서 확인하고 싶습니다. [3] 인덱스 [2] 가장 가까운 my_value 하지만 my_value 아래로 떨어지면 안됩니다.

아래 코드를 시도했습니다.

for key,sublists in itertools.groupby(my_list,lambda y:y[0]):
        v=[] #initialize it in case no element fulfill the condition
        for v in itertools.takewhile(lambda x:float(x[-1].replace(",","."))<my_value ,sublists):
            pass
        if v: 
            print(v[-1])

다음 출력을 받았습니다.

0,101
0,85
0,80

내가 원하는 출력은 다음과 같습니다.

0,78
0,75
0,72

  • 답변 # 1

    my_value = 188
    numbers = [float(line[2].replace(',', '.')) for line in my_list]
    minima = [(num - my_value, line[3])for num, line in zip(numbers, my_list) if num >= my_value]
    minima = sorted(minima, key=lambda x: x[0])
    top3 = [val[1] for val in minima[:3]]
    print(top3)
    
    

  • 답변 # 2

    내장 된 sort ()를 사용하지 않는 이유는 무엇입니까? :

    
    my_list = [row for row in my_list if float(row[2].replace(',','.')) >= my_value]
    my_list.sort(key=lambda l:float(l[2].replace(',','.')))
    for row in my_list:
        print(row)
    
    

    >

    ['Italy', 'Meat', '188,01', '0,72']
    ['Spain', 'Meat', '188,13', '0,75']
    ['Morocco', 'Meat', '188,49', '0,78']
    ['Italy', 'Meat', '188,61', '0,67']
    ['Morocco', 'Meat', '188,94', '0,60']
    ['Spain', 'Meat', '189,01', '0,40']
    ['Italy', 'Meat', '189,32', '0,45']
    ['Morocco', 'Meat', '189,38', '0,44']
    ['Spain', 'Meat', '189,56', '0,35']
    ['Morocco', 'Meat', '189,90', '0,32']
    ['Morocco', 'Meat', '190,00', '0,15']
    ['Italy', 'Meat', '190,10', '0,31']
    ['Spain', 'Meat', '190,16', '0,20']
    ['Italy', 'Meat', '190,20', '0,11']
    ['Spain', 'Meat', '190,76', '0,10']
    
    
    

  • 이전 Erro CSRF를 사용하려면 비밀 키가 필요합니다 Python/Flask
  • 다음 sql - 동적 테이블의 모든 조건이 충족되는 내부 조인