2014-12-15 5 views
4

I는 절차 add_to_index을 개발하고 :추가] 요소 - 3 개 입력 소요 파이썬

  • 인덱스 [[[URL1, URL2, ...]], ... .]
  • 키워드 : 문자열
  • 의 URL : 문자열

키워드가 인덱스에 이미있는 경우, URL이 해당 키워드와 관련된 URL 목록에 추가됩니다.

키워드가 인덱스에없는 경우

새 요소는 인덱스입니다 : -> [['google', 'http://google.com']]

add_to_index(index,'computing','http://acm.org') 
print index 

출력 -

[keyword,[url]] 

CODE

index = [] 

def add_to_index(index,keyword,url): 
    flag = 0 
    count = 0 
    for lists in index: 
     count += 1 
     if(lists[0]==keyword): 
      index[count][1].append(url) 

    if(flag ==0): 
     index.append([keyword,url]) 

#calling the function below 

add_to_index(index,'google','http://google.com') 
print index 

출력>[['google', 'http://google.com'], ['computing', 'http://acm.org']]

오류 ->

index[count][1].append(url) 
AttributeError: 'str' object has no attribute 'append' 

예상 출력

add_to_index(index,'google','http://gmail.com') 
print index 

: 당신은 세 가지 실수를했을

[['google', ['http://google.com', 'http://gmail.com']], 
['computing', ['http://acm.org']]] 
+1

정말 잘못된 데이터 구조 인 것 같습니다. – ekrah

+1

퀴즈에서 나는 경쟁적인 프로그래밍 경쟁에 참가했습니다. – akshaynagpal

답변

3

는, 첫째로 당신은 flag를 사용하지 않은 둘째 당신은 문자열로 URL을 추가합니다. 그리고 마지막으로 으로 카이 보스 케타 쟈가 코멘트에 언급되어 있으며, 카운트는 결국 증가해야합니다. 그것은

index = [] 

def add_to_index(index,keyword,url): 
    flag = 0 
    count = 0 

    for lists in index: 

     if(lists[0]==keyword): 
      flag = 1 
      index[count][1].append(url) 
     count += 1 

    if(flag ==0): 
     index.append([keyword,[url]]) 
     # Take note of append away here 
#calling the function below 

add_to_index(index,'google','http://google.com') 
print index 

add_to_index(index,'computing','http://acm.org') 
print index 

add_to_index(index,'google','http://gmail.com') 
print index 

달리 할 수있는 출력 이제 당신이 추가 할 목록의 내부 문자열에 추가하려는,

[['google', ['http://google.com']]] 
[['google', ['http://google.com']], ['computing', ['http://acm.org']]] 
[['google', ['http://google.com', 'http://gmail.com']], ['computing', ['http://acm.org']]] 
+1

'for'루프가 끝날 때 'count'가 세 번 잘못되어야합니다. – Kaivosukeltaja

+2

@Kaivosukeltaja 기분이 좋지 않다면 죄송 합니다만, 이유 때문에 복사 및 붙여 넣기가 불가능하므로 이름을 쓰는 데 3 분이 걸렸습니다. :(.. –

0

처음이다. 그런 다음 키워드를 찾으면 flag = 1이라고 말한 것을 잊었습니다. 다음을 시도하십시오.

index = [] 

def add_to_index(index,keyword,url): 
    flag = 0 
    count = 0 
    for lists in index: 
     if(lists[0]==keyword): 
      index[count][1].append(url) 
      flag = 1 
    count += 1 
    if(flag ==0): 
     index.append([keyword,url]) 

#calling the function below 

add_to_index(index,'google','http://google.com') 
add_to_index(index,'computing','http://acm.org') 
add_to_index(index,'google','http://gmail.com') 
print index 

나는 당신이 defaultdict를 사용하는 것이 훨씬 더 좋을 것이라고 생각합니다. 자동으로 키워드를 검색하여 기존 키워드에 항목을 추가하거나 찾지 못한 경우 새 키워드를 만듭니다.

0

나는 이것이 당신이 원하는 생각 :

index = {} 

def add_to_index(index, keyword, url): 
    if keyword not in index: 
     index[keyword] = [url] 
    else: 
     index[keyword].append(url) 


>>> add_to_index(index,'computing','http://acm.org') 
>>> add_to_index(index,'google','http://gmail.com') 
>>> add_to_index(index,'google','http://gmail.com') 
>>> index 
{'computing': ['http://acm.org'], 'google': ['http://gmail.com', 'http://gmail.com']} 

심지어 비 전역 변수 간단한 클래스를 구현하여 index을 만들 수 :

index = [] 

def add_to_index(index,keyword,url): 
    flag = 0 
    count = 0 
    for lists in index:   
     if lists[0] == keyword: 
      lists[1].append(url) 
      flag = 1 
     count += 1 

    if flag == 0: 
     index.append([keyword, [url]]) 

#calling the function below 

add_to_index(index,'google','http://google.com') 
print index 
0

나는이에 대한 사전의 사용을 제안합니다 (물론 중첩 된 목록에서도 가능합니다.)

class Index(object): 

    def __init__(self): 
     self.index = {} 

    def add_to_index(self, keyword, url): 
     if keyword not in index: 
      self.index[keyword] = [url] 
     else: 
      self.index[keyword].append(url) 
0

깃발과 카운트 변수를 없앰으로써 상황을 조금 단순화 할 수 있습니다.

index = [] 

def add_to_index(index, keyword, url): 
    for e in index: 
     if e[0] == keyword: 
      e[1].append(url) 
      return 

     else: 
      index.append([keyword,[url]])