2010-08-02 4 views
0
drug_input=['MORPHINE','CODEINE']  
def some_function(drug_input)  
     generic_drugs_mapping={'MORPHINE':0, 
           'something':1, 
           'OXYCODONE':2, 
           'OXYMORPHONE':3, 
           'METHADONE':4, 
           'BUPRENORPHINE':5, 
           'HYDROMORPHONE':6, 
           'CODEINE':7, 
           'HYDROCODONE':8} 

row 목록입니다.python : 목록에서 값을 없애는 중

나는 그것이 0이 경우에, 그 그 drug_input 정의를 제외한 row[..]=''의 모든 구성원을 설정하려는, 그리고 7

그래서 row[1,2,3,4,5,6,8]=''

row 경우는 처음입니다 :

row[0]='blah' 
row[1]='bla1' 
... 
... 
row[8]='bla8' 

I이 필요합니다

row[0]='blah' (same as before) 
row[1]='' 
row[2]='' 
row[3]='' 
... 
... 
row[7]='bla7' 
row[8]='' 

어떻게해야합니까?

from collections import defaultdict # put this at the top of the file 

class EmptyStringDict(defaultdict): 
    __missing__ = lambda self, key: '' 

newrow = EmptyStringDict() 
for drug in drug_input: 
    keep = generic_drugs_mapping[drug]  
    newrow[keep] = row[keep] 
saved_len = len(row) # use this later if you need the old row length 
row = newrow 

대부분 빈 문자열이 낭비의 목록을 갖는 당신 정말이 목록으로 필요하지 않는 한

+1

목록을 사용하지 마십시오. 사전을 사용하십시오. –

+1

당신이 무엇을 요구하고 있는지 잘 모르겠습니다. 'row'의 완전한 가치는 결국 무엇이되어야합니까? 빈 문자열이 아닌 값은 무엇이되어야합니까? –

+0

당신은 거의 틀림없이 Doing It Wrong입니다. 스파 스가 밀도보다 낫습니다. –

답변

2

을하고 ''에 다른 모든 사람을 설정

keep = set(generic_drugs_mapping[drug] for drug in drug_input) 
for i in range(len(row)): 
    if i not in keep: 
    row[i] = '' 
+0

대단히 감사합니다 !! 범위는 무엇을합니까 ?? –

+1

@I__ :'range'는 0부터 매개 변수 (배타적)로 주어진 숫자의 목록을 반환하는 표준 라이브러리 함수입니다. 'range (5)'=='[0,1,2,3,4]'와 같습니다. http://docs.python.org/library/functions.html#range – sth

+0

'len (row)'이 큰 경우'range' 대신'xrange'를 사용합니다; 그것은 for 루프에서 동일하게 작동하지만 실제로 메모리에 목록을 작성하는 것을 피합니다. –

2

나는 defaultdict를 설정할 것입니다. 그러면 실제로 삽입 된 값을 제외한 모든 값에 대해 ''을 반환하는 객체가 생성됩니다. 그러나 반복 코드를 변경하여 xrange(saved_len)을 사용해야합니다. 이상적으로, 그런 일을 필요로하지 않도록 목록을 사용하는 코드를 수정하면됩니다.

당신이 정말로 목록 구축하려는 경우 먼저 보관해야합니다 모든 인덱스의 집합을 만들 수

newrow = [''] * len(row) # build a list of empty strings 
for drug in drug_input: 
    keep = generic_drugs_mapping[drug]  
    newrow[keep] = row[keep] # fill it in where we need to 
row = newrow # throw the rest away 
+0

죄송합니다. –

+0

전에 그다지 명확하지 않은 제 질문을 업데이트했습니다. 이제 귀하의 질문에 더 잘 답변 할 수 있도록 답변을 업데이트했습니다. –

관련 문제