2015-04-23 2 views
3

Я хотел бы предложить некоторое предложение по проблеме доступа к данным, хранящимся в списке списков.python условный доступ к списку списков

Мой список списков выглядит следующим образом:

my_list = [['RN1', 200, 0.55], ['RN2', 0.8, 0.44], ['RN3', 0.2, 0.01]] 

Список упорядочен в отношении третьего элемента внутренних списков.

То, что я хочу сделать, это:

  1. Чтобы проверить, если третий элемент первого внутреннего списка больше или равно 0,9; если да, то я хочу, чтобы создать список, содержащий первые 2 элементы первого внутреннего списка

    my_list[0][2] >= 0.9 
    

    Что, если правда будет давать:

    new_list = [['RN1', 200]] 
    
  2. Если нет, то я хочу добавить к my_list[0][2] элементу соответствующий элемент второго внутреннего списка:

    my_list[0][2] + my_list[1][2] и проверьте, больше ли это значение 0.9.

Если да, я хочу, чтобы остановить цикл, добавив к моему new_list первых 2 элементов второго внутреннего списка:

new_list = [['RN1', 200], ['RN2', 0.8]] 

Если не продолжать добавлять элементы до самого порога 0.9 достигается.

Конечно, это только пример. Мои реальные списки могут быть намного больше, и процесс должен быть итеративным.

Я пробовал разные возможности, но все они не работают. Например, я сделал:

sum_percentage = 0.0 

new_list =[] 

    for i in old_list: 

     if sum_percentage <= 0.9: 

      sum_percentage = sum_percentage + i[2] 

     new_list.append([i[0], i[1]]) 

И другие варианты этого ... Теперь я застрял.

Любые советы?

Большое спасибо

+1

У вас есть 2 линии. Вы хотите добавить этот элемент только в том случае, если 'sum_percentage <= 0.9'. Вы хотите каждый раз добавлять 'i [2]' в 'sum_percentage'. – Phylogenesis

+0

Я правильно интерпретирую это? Идея состоит в том, чтобы добавить первые два элемента старого списка в новый список до тех пор, пока сумма третьего значения (ов) элементов в старом списке больше или равна 0,9? – Matthew0898

+0

в вашем коде, цикл 'for' имеет слишком большой отступ. – dbliss

ответ

3

Это сделает работу за вас:

sum_percentage = 0.0 
new_list = [] 
for i in old_list: 
    new_list.append(i[:2]) 
    sum_percentage += i[2] 
    if sum_percentage >= 0.9: 
     break 

Я думаю, что это само за себя, но если вы запутались о чем-нибудь, дайте мне знать, и я буду расширьте этот ответ.

+0

Большое спасибо dbliss. Он отлично работал для меня. Теперь кажется таким простым :) – atalantafugiens

+0

@atalantafugiens, не забудьте принять ответ, если вы удовлетворены этим! – Konstantin

+0

@ Konstantin сделано! – atalantafugiens

Смежные вопросы