2013-06-08 2 views
1

헤더 행이있는 커다란 목록의 목록 (CSV에서 가져옴)이 있습니다. 첫 번째 세 줄은 다음과 같습니다. 각 행에는 훨씬 더 많은 요소가 있지만 읽기 쉽도록 잘 렸습니다.목록의 목록 파이썬 - 특정 위치/슬라이싱 하위 목록을 참조합니다.

[('Div', 'Date', 'HomeTeam', 'AwayTeam', 'FTHG', 'FTAG'), 
('E0', '18/08/12', 'Arsenal', 'Sunderland', '0', '0'), 
('E0', '18/08/12', 'Fulham', 'Norwich', '5', '0')... ] 

내가/한 Excel에서이 그래서 내가 파이썬을 배운로 작동하는 실제 무언가를 가지고 웹 기반 만들고 싶어하는 취미 축구 통계 패키지입니다. 나는 평균을 계산할 수있는 숫자를 가지고 있으므로 각 행의 홈 팀과 일치시키고 내가 선택한 모든 열의 값을 누적 합계에 더하고 평균을 구할 수 있습니다. 홈 팀이 "첼시 (Chelsea)"와 매치 할 때마다 간단히 말하자면, 집에서 득점 한 평균 득점 수를 계산하기 위해 누적 합계에 추가하고 싶습니다. 데이터 파일은 매우 일관 적이기 때문에 특정 변수는 항상 4 열 또는 5 열 등의 변수에 포함됩니다.

def CalcAverageHome(team, column, data_file): 
    total = 0 
    count = 0 
    for team in data: 
     if data[2] == team: 
      print data_file[4] 
     #total += data[4] 
     count += 1 
    else: 
     pass 
    average = total/5 
    return 
print "Here's the Average" 
print CalcAverageHome("Chelsea", 4, data) 

내가 그 코드를 실행하면 네 번째 목록 (최상위 목록)로 날을 제공, 즉

('E0', '18/08/12', 'QPR', 'Swansea', '0', '5'... 

내가 itertools를 사용하려고 시작했지만, 심지어 그냥 목록을 통해 반복하는 것은 그것을 인쇄하기 디버거가 작동하지 않았다으로

print "Let's try this with itertools" 
def chain(*iterables): 
    for it in iterables: 
    print it 
    for element in it: 
     yield element 
     print element 
chain(data) 

data는 CSV의 데이터가 목록에 읽은 있다는 변수이다 (I 만들기 위해 좋아하는 내가 가서 확인 그것은 작동) 목록.

하지만 아무것도 인쇄되지 않습니다. 표준 문서를 살펴 봤지만 빛이 없어지지는 않습니다. 간단히 각 하위 목록을 반복하고 팀이 일치하는지 확인한 다음 몇 가지 요소가있는 요소로 처리합니다. 나는 하루와 이틀 동안 다양한 솔루션을 (3 일 이상)보고 있었기 때문에 조금 좌절했다.

+0

이것은 data in team : data [2] == team : ...'당신이 생각하기에 그렇게 생각하니? '데이터'는 어디에 정의되어 있습니까? –

+0

죄송합니다. 데이터가 이전에 정의되어 있으며 방금 편집에 추가했습니다. 데이터 파일의 2 열의 목록 항목이 현재보고있는 팀인지 확인하고 싶습니다. – Withnail

+0

확인. 나는'data_file'이리스트의리스트라고 가정했다. 그렇다면'data_file'은 무엇입니까? –

답변

0

생각한 중첩 된 목록을 반복하면됩니다. 또한 샘플 코드에 잘못된 변수가 있습니다. 나는이

data_file = [('Div', 'Date', 'HomeTeam', 'AwayTeam', 'FTHG', 'FTAG'), 
('E0', '18/08/12', 'Arsenal', 'Sunderland', '0', '0'), 
('E0', '18/08/12', 'Arsenal', 'Sunderland', '4', '0'), 
('E0', '18/08/12', 'Arsenal', 'Sunderland', '2', '0'), 
('E0', '18/08/12', 'Fulham', 'Norwich', '5', '0') ] 

def CalcAverageHome(team, column, data_file): 
    total = 0 
    n=0   # the number of times the team you are looking for is in the data 
    for row in data_file: 
     if row[2] == team: 
      total += int(row[column]) 
      n+=1 
    try: 
     average = float(total)/n # if u r using python 2.7.Else if 3.2+ just total/n 
    except ZeroDivisionError:  # to prevent zerodevisionerror if t team had n games 
     average = 'Not played' 
    return average 

문제점은 당신이 또한 경우에 검사의 계산 function.So에 대한 매개 변수했다 data_file에, 이상 반복에 대해 을 사용

  • 했다 작동 생각 당신은 for 루프 내부에서 사용했지만 함수에 입력 한 팀을 확인하지 않고 for 루프를 사용하여 반복 한 데이터의 행을 확인했습니다.
+1

명시 적으로 '카운트'를 유지해야하는 이유는 무엇입니까? 'data_file [count]'대신'row'를 사용할 수 없습니까? –

+0

네가 맞다. 나는 코드를 만들려고 노력했다. @chris code.i와 같은 코드가 지금 편집 중이다. – vaggelas

+0

그건 멋지다. (그리고 의미가있다. 문제가있는 행 요소를 참조하고 있었다.) 하나의 질문이지만, 나는 그것이 옳지 않다는 것을 알고있는 둥근 정수로 보였다. 맞습니다, 그냥 둥근 것입니다).귀하의 모의 데이터 세트와 광산 모두에 문제가 있습니다. 세 번째 매치를 '27'로 설정하면 평균은 10이고, 10.33 반복되어야합니다. – Withnail