2015-02-25 3 views
0

Здравствуйте, я пытаюсь добавить значение в список, и хотя здесь есть разные примеры, это другое. Я использую цикл FOR, чтобы пройти все значения в список, и если правильное имя найдено в «каждом», я хочу добавить «каждый» в новый список. Вот примерКак добавить значение цикла FOR в список

for each in lines: 
      if names in each: 
       print(names) 
       print(each) 
       if len(newnames)<=3:     
        newnames.append((each)) 

       elif len(newnames)>3:     
        newnames = newnames[:2] 
      print(newnames) 

линии выглядит следующим образом

[Алекс | 7 ', 'Jake | 10', 'Jake | 2', 'Jake | 5', 'Josh | 3', «josh | 5», «josh | 7», «megan | 6», «megan | 8», «megan | 9»]

Имена - это список только с одной копией каждого из этих имен. Надеюсь, вам будет достаточно информации, чтобы вы могли ответить на этот вопрос, потому что он полностью меня превзошел.

Cheers.

+0

вывод это: - '['alex', 'jake', 'josh', 'megan']' ?? –

+0

Что вы пытаетесь сделать? – taesu

+0

Имена is = ['alex', 'jake', 'josh', 'megan'] – Programmer1

ответ

0

Если вы хотите использовать только имена из строк и использовать метод split split() для разделения имени на строки.

например.

>>> names = set() 
>>> l = ['alex|7', 'jake|10', 'jake|2', 'jake|5', 'josh|3', 'josh|5', 'josh|7', 'megan|6', 'megan|8', 'megan|9'] 
>>> for i in l: 
...  names.add(i.split("|")[0]) 
... 
>>> print names 
set(['josh', 'jake', 'alex', 'megan']) 
>>> 

Pythonic путь:

>>> l = ['alex|7', 'jake|10', 'jake|2', 'jake|5', 'josh|3', 'josh|5', 'josh|7', 'megan|6', 'megan|8', 'megan|9'] 
>>> set([i.split("|")[0] for i in l]) 
set(['josh', 'jake', 'alex', 'megan']) 
>>> 
0

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

Если вы хотите, чтобы список был уникальным, просто замените его набором (и добавлением с добавлением) или, альтернативно, добавьте result = set(result) в конец программы.

Во всяком случае, как насчет:

result = [] 
for each in lines: 
    name = each.split('|')[0] 
    if name in names: 
     result.append(name) 
print result 

Учитывая ваш список ввода, это даст в качестве результата:

['alex', 'jake', 'jake', 'jake', 'josh', 'josh', 'josh', 'megan', 'megan', 'megan'] 

Если все эти имена в вашем names списке. Если нет, он добавит только те имена, которые находятся в этом списке.

0

Я согласен с Вивек, а также я думаю, что:

if names in each: 

должен быть

if each in names: 

Он также появляется, как будто вы сравниваете список к элементу списка. Обычно вы выполняете противоположное сравнение. Вам также не нужно добавлять значение в качестве кортежа, вы можете просто добавить его в список. См. Этот пример:

lines=['alex|7', 'jake|10', 'jake|2', 'jake|5', 'josh|3', 'josh|5', 'josh|7', 'megan|6', 'megan|8', 'megan|9'] 
    names=[l.split('|')[0] for l in ['alex|7', 'jake|10', 'jake|2', 'jake|5', 'josh|3', 'josh|5', 'josh|7', 'megan|6', 'megan|8', 'megan|9']][:-4] 
    newnames=[] 

    for each in [l.split('|')[0] for l in lines]: 
     if each in names: 
      print(names) 
      print(each) 
      if len(newnames)<=3: 
       newnames.append(each) 

      elif len(newnames)>3: 
       newnames = newnames[:2] 
       print(newnames) 
Смежные вопросы