2017-11-14 5 views
-1

증가 값 및파이썬 매칭리스트 문자열 및 I 글로벌 하나를 두 개의리스트가

List1 = [[['MP01'], 0], [['MP02'], 0], [['MP03'], 0], [['MP04'], 0], [['MP05'], 0], [['MP06'], 0], [['MP07'], 0], [['MP08'], 0], [['MP09'], 0], [['MP10'], 0], [['MP11'], 0], [['MP12'], 0], [['MP13'], 0], [['MP14'], 0], [['MP15'], 0], [['MP16'], 0], [['MP17'], 0], [['MP18'], 0], [['MP19'], 0], [['MP20'], 0], [['MP21'], 0], [['MP22'], 0], [['MP23'], 0], [['MP24'], 0], [['MP25'], 0], [['MP26'], 0], [['MP27'], 0], [['MP28'], 0], [['MP29'], 0], [['MP30'], 0], [['MP31'], 0], [['MP32'], 0]] 

function(): 
    List2 = [['MP18', 100], ['MP28', 50], ['MP20', 30], ['MP07', 30], ['MP12', 10], ['MP03', 10], ['MP30', 10], ['MP14', 10], ['MP15', 5], ['MP16', 5], ['MP13', 5], ['MP02', 5], ['MP26', 5], ['MP23', 5], ['MP22 ', 5], ['MP01', 5]] 

    final_list = [[[a], b+dict(List2).get(a, 0)] for [a], b in List1] 

기본적 함수에서 로컬 하나는 "목록 2"는 플레이어의 라운드에서 달성 한 점수를 나타낸다 게임 (MP18은 100, MP28은 50 등)과 "List1"은 각 플레이어의 게임 라운드의 점수를 누적하는 데 사용됩니다.

필자가 원하는 것은 본질적으로 "List1"에 각 플레이어 점수를 추가하는 것이고 "final_list"는 함수 내에 있기 때문에 함수가 호출 될 때마다 " List2 ","List1 "에 새 값을 추가하면 단순히 덮어 씁니다. 예를 들어, 첫 번째 라운드 후 "List1입니다"는 "목록 2"에서 플레이어 업데이트 된 값을 갖게됩니다

['MP18', 100], ['MP28', 50] etc 

그래서 MP18는 100 포인트가되며, MP28은의를 통해 두 번째 실행에, 그러나 50 등이있을 것이다 프로그램 (두 번째 라운드) "목록 2"는 예를 들면 각 플레이어에 대해 다른 값을 가질 것이다 :

[['MP18, 50], [MP28, 100] etc 

그러나 "final_list"이 함수로부터 생성되고 있기 때문에, 점수의 제 1 세트가 덮어 쓰기되고

2 번째 대신에 2 번째가 의미가있는 경우 첫 번째에 추가됩니까?

[[MP28, 100], [MP18, 50] 

으로는 원하는 결과에 반대 : 같은 "List1입니다"를 통해 두 번째 실행에 보이는 것

[[MP28, 150], [MP18, 150]] 

희망이 도움이되는 설명을 좀 더입니다 : D

+0

: 최근 코멘트에 대해서는

, 당신은 함수의 final_list 외부를 만들려면이 시도 할 수 있습니다 [슬로우 Python의 "내부 조인"목록의 코드] (https://stackoverflow.com/questions/47267727/slow-code-in-inner-joins-lists-in-python). 'List2'를 dict로 만들고 O (1)에서'List1'을 업데이트하여 dict에서''MP ''값을 찾습니다. –

+0

안녕하세요. 불행히도 이것은 토론 포럼이나 튜토리얼이 아닙니다. 시간을내어 [ask]와 그 페이지의 다른 링크를 읽으십시오. [실제 누군가가 도와 줄 수 있습니까?] 실제 질문이 아닙니다. (https://meta.stackoverflow.com/q/284236/2823755) – wwii

답변

1

이 시도 할 수 있습니다 :

List1 = [[['MP01'], 0], [['MP02'], 0], [['MP03'], 0], [['MP04'], 0], [['MP05'], 0], [['MP06'], 0], [['MP07'], 0], [['MP08'], 0], [['MP09'], 0], [['MP10'], 0], [['MP11'], 0], [['MP12'], 0], [['MP13'], 0], [['MP14'], 0], [['MP15'], 0], [['MP16'], 0], [['MP17'], 0], [['MP18'], 0], [['MP19'], 0], [['MP20'], 0], [['MP21'], 0], [['MP22'], 0], [['MP23'], 0], [['MP24'], 0], [['MP25'], 0], [['MP26'], 0], [['MP27'], 0], [['MP28'], 0], [['MP29'], 0], [['MP30'], 0], [['MP31'], 0], [['MP32'], 0]] 

List2 = [['MP18', 100], ['MP28', 50], ['MP20', 30], ['MP07', 30], ['MP12', 10], ['MP03', 10], ['MP30', 10], ['MP14', 10], ['MP15', 5], ['MP16', 5], ['MP13', 5], ['MP02', 5], ['MP26', 5], ['MP23', 5], ['MP22 ', 5], ['MP01', 5]] 
final_list = [[[a], b+dict(List2).get(a, 0)] for [a], b in List1] 

을 그리고, 나중에 목록에서 값을 곱한 :

new_final_list = [[[a], 2*b] for [a], b in List1] 

출력 :

[[['MP01'], 0], [['MP02'], 0], [['MP03'], 0], [['MP04'], 0], [['MP05'], 0], [['MP06'], 0], [['MP07'], 0], [['MP08'], 0], [['MP09'], 0], [['MP10'], 0], [['MP11'], 0], [['MP12'], 0], [['MP13'], 0], [['MP14'], 0], [['MP15'], 0], [['MP16'], 0], [['MP17'], 0], [['MP18'], 0], [['MP19'], 0], [['MP20'], 0], [['MP21'], 0], [['MP22'], 0], [['MP23'], 0], [['MP24'], 0], [['MP25'], 0], [['MP26'], 0], [['MP27'], 0], [['MP28'], 0], [['MP29'], 0], [['MP30'], 0], [['MP31'], 0], [['MP32'], 0]] 

편집 : 관련

List1 = [[['MP01'], 0], [['MP02'], 0], [['MP03'], 0], [['MP04'], 0], [['MP05'], 0], [['MP06'], 0], [['MP07'], 0], [['MP08'], 0], [['MP09'], 0], [['MP10'], 0], [['MP11'], 0], [['MP12'], 0], [['MP13'], 0], [['MP14'], 0], [['MP15'], 0], [['MP16'], 0], [['MP17'], 0], [['MP18'], 0], [['MP19'], 0], [['MP20'], 0], [['MP21'], 0], [['MP22'], 0], [['MP23'], 0], [['MP24'], 0], [['MP25'], 0], [['MP26'], 0], [['MP27'], 0], [['MP28'], 0], [['MP29'], 0], [['MP30'], 0], [['MP31'], 0], [['MP32'], 0]] 

def some_function(): 
    List2 = [['MP18', 100], ['MP28', 50], ['MP20', 30], ['MP07', 30], ['MP12', 10], ['MP03', 10], ['MP30', 10], ['MP14', 10], ['MP15', 5], ['MP16', 5], ['MP13', 5], ['MP02', 5], ['MP26', 5], ['MP23', 5], ['MP22 ', 5], ['MP01', 5]] 
    global List1 
    List1 = [[[a], b+dict(List2).get(a, 0)] for [a], b in List1] 
+0

"final_list = [[[a], b + dict (List2) .get (a, 0)] for [a], List1의 b] "라인 실제로하고 있습니까? 나는 그것을 이해하기 위해 고심하고 있으며, 미래에 알게되면 매우 도움이 될 것입니다. – Sean

+0

@Sean'final_list'는 목록 이해력을 사용하여 만들어집니다. 본질적으로, 그것은 List1을 반복하고 각 문자열과 해당 값을 압축 해제합니다. 그런 다음 코드는'dict' 함수에 전달하여'List2'에서 사전을 만들고 각 반복시 문자열 인'a'와 연관된 방금 생성 된 사전에 저장된 값에 액세스합니다.이것은'get'을 사용하여 수행됩니다. 문자열이 발견되지 않으면 기본값 인 0을 반환합니다. 궁금한 점이 있으면 알려주세요. – Ajax1234

+0

안녕하세요. 이제 내 프로그램에 조금 더 문제가있어 괜찮 으면 도움을 요청하고 싶습니까? 당신이 내게 준 코드는 훌륭하지만, "List1"이라는 프로그램은 전역 변수이고 "List2"는 함수에있다. (프로그램의 초기에 조작되었다.) "List1"이 전역 변수 인 이유는 함수가 호출 될 때마다 값을 다시 설정하지 않기를 원하기 때문입니다. 그러나 "final_list"목록이 만들어지면 함수 내부에서 만들어지고 함수가 매번 재설정됩니다. 라는. 이 문제를 해결할 수있는 방법이 있습니까? 그 코드가 도움이된다면 게시 할 수 있습니다 : D – Sean