2016-11-04 4 views
1

예를 들어 항목 목록이 있습니다.데이터 구조에 특정 항목이 있는지 확인하고 사용합니다.

item_list = ['char_model_..._main', 'char_model_..._main_default', 'char_rig_..._main', 'char_rig_..._main_default', 'char_acc__..._main'] 

나는 목록에서 원하는 어떤 일을 얻을 수 있어요 다음과 같이 나는 그것을 코드 (안 아주 품위있는 방법으로, 그러나 그것은 나에게 피드백을 제공)하는 동안 :

item_wanted=[] 
for item in item_list: 
    if item.startswith("char_model") and (item.endswith("main") or item.endswith("main_default")): 
     item_wanted.append(item) 

그래서 잠시 나는 지금 내가 my item_wanted리스트에 'char_model_..._main', 'char_model_..._main_default'이 들어있는 것을 원했을 때, 'main'이 있다면 'main_default'을 쓰도록 코드를 작성해야 하는가?

+2

긴 조건을 여러 개의 'if'로 나눕니다. – UnholySheep

+0

하나의 옵션은'items_wanted'를 통해 다시 반복하는 것입니다. 그런데 왜 결과 목록을 사용합니까? – Wolf

+0

목록 결과가없는 버전을 사용해 보았습니다. 왜냐하면 실제로 하나의 최종 결과에 관심이 있다는 것을 알고 있기 때문입니다. 목록 결과의 문제점은 다른 한편으로는 여러 개의 일치 항목을 얻는 것입니다. 하나의 변수 만 사용하면 나쁜 결과가 좋은 결과를 덮어 쓸 수 있습니다. 그러니 어떻게 [두 가지 변수를 사용하여]하는 방법을보십시오 (http://stackoverflow.com/a/40418469/2932052). – Wolf

답변

0

아니라, 내가 절대적으로 당신의 의도를 가지고 있지 않다,하지만 어쩌면 당신이 그것을

if item.startswith("char_model") : 
    if item.endswith("main"): 
    #do your thing if its "char_model...main" 
    elif item.endswith("main_default): 
    #do your thing if its "char_model...main" 

희망을 분할 시도 할 수 있습니다이

+0

루프에서이 작업을 수행하면 두 결과가 다시 나타납니다. – Wolf

0

분할을 기본을 포함하는 이들에 유효한 항목을하는 데 도움이 포함하지 않음. 그런 다음 을 수행하고 끝 부분을 기본값 인으로 반복하고 다른 목록에서 동일한 키를 찾으십시오 (물론 끝 부분 제거). 그것이 없다면, 우리는 기본값을 사용하는 것에 의지해야한다는 것을 의미합니다. 그렇다면 기본값 그대로 사용합니다.

item_wanted = [] 
item_default = [] 

for item in item_list: 
    if item.startswith("char_model"): 
     if item.endswith("main_default"): 
      item_default.append(item) 
     elif item.endswith("main"): 
      item_wanted.append(item) 

for potential in item_default: 
    if potential[:-8] not in item_wanted: #Look for the key without default 
     item_wanted.append(potential)  #Append it if not present 
+0

은 실제 요구 사항과 일치하는 구현을보기에는 꽤 복잡해 보입니다. 나는 * x_main_default * 패턴을 선호한다. – Wolf

0

내 접근 방식은 사용에 단순히 두 개의 변수 및 입력 목록에 대한 하나의 반복이다. "good""best" 입력에 일치 할 수 있습니다. 단순화를 위해, 나는 숫자의 목록을 사용, 그리고, mainmain_default의 경우, 나는 1

2에 코드를 선호하는 데 사용 :

def match(items): 
    found1 = None 
    found2 = None 
    for i in items: 
     if (i==1): 
      found1 = i 
     elif (i==2): 
      found2 = i 
    return found1 or found2 

print (match([2,1])) 
print (match([3,2])) 
print (match([4,3])) 

출력 :

1 
2 
None 

참조 이 실행 중 https://ideone.com/bBj5Op