2015-07-05 3 views
1

фона: У меня есть текстовые файлы, имеет входы, как:Невозможно добавить в список

#1 GLN 15.A OE1 
#1 ILE 16.A C 
#1 ILE 16.A CA 
#1 ILE 16.A CB 
#1 ILE 16.A CD1 

преобразовать этот файл в строку в Python. И я получаю результаты (например, числа), которые я хочу.

Часть кода здесь:

def extractnum(s): 
    x = s.split('\n') 
    x.pop() #To remove last line which is empty 
    y = [ i.split() for i in x ] 
    z = [ j[2] for j in y ] #z is the list that contains the residue and chain information 
    n = [int(k.split('.')[0]) for k in z] 
    a_chain_residues = '' 
    ca_a_chain_residues = '' 
    list_of_a_chain_residues = [ ] 
    for i in list(set(z)): #list(set(z)) gives a list that removes all the duplicate items in z: it doesn't change z 
     if i[-1] == 'A': 
      a_chain_residues = a_chain_residues + i +',' 
      ca_a_chain_residues = ca_a_chain_residues + i + '.ca,' 
      list_of_a_chain_residues = list_of_a_chain_residues.append(i) 
     print list_of_a_chain_residues 

Ошибка в терминале считывает

Почему не «я» добавить в список? Есть ли способ исправить это?

ответ

2

append не возвращает значение; он напрямую изменяет список. Вы получите желаемый эффект, просто введя:

list_of_a_chain_residues.append(i) 
3

Пожалуйста, обратите внимание, что:

>>>i = [] 
>>>print i.append(2) 
None 

Возвращаемые значения этого Append является None.

Таким образом, при этом:

list_of_a_chain_residues = list_of_a_chain_residues.append(i) 

Вы устанавливаете list_of_a_chain_residues быть None, потому что Append не возвращает значение. ли это вместо:

list_of_a_chain_residues.append(i) 
0

проблема с Append в список, который не возвращает None, если вы сделаете это, вы получите ответ

def extractnum(s): 
    x = s.readlines() 
    x.pop() #To remove last line which is empty 
    y = [ i.split() for i in x ] 
    z = [ j[2] for j in y ] #z is the list that contains the residue and chain information 
    n = [int(k.split('.')[0]) for k in z] 
    a_chain_residues = '' 
    ca_a_chain_residues = '' 
    list_of_a_chain_residues = [ ] 
    for i in list(set(z)): #list(set(z)) gives a list that removes all the duplicate items in z: it doesn't change z 
     if i[-1] == 'A': 
      a_chain_residues = a_chain_residues + i +',' 
      ca_a_chain_residues = ca_a_chain_residues + i + '.ca,' 
      list_of_a_chain_residues = list_of_a_chain_residues + list(i) 
     print list_of_a_chain_residues 

s = open("./file1.txt",'r') 
extractnum(s) 
0

Возвращаемый тип append метода в python list всегда None , append() работает на месте, то есть изменяет исходный список тогда и там.

list_of_a_chain_residues = list_of_a_chain_residues.append(i) 

В строке выше, без сомнения, значение в i в настоящее время добавляется к списку list_of_a_chain_residues, но в следующий момент, вы сразу присваиваем значение, возвращаемое append к list_of_a_chain_residues (который None). Таким образом, даже если список становится дописывается, назначая себя возвращаемое значение append() теряет весь прогресс и делает его None. Поэтому замените строку

list_of_a_chain_residues = list_of_a_chain_residues.append(i) 

просто

list_of_a_chain_residues.append(i) 
Смежные вопросы