2012-07-01 4 views
1

저는 방금 Python을 시작했으며 도움이 필요합니다. 내가 루프를 사용하지 않고 일정한하여 내부리스트의 각 요소를 곱과 장소에서 할 수있는 방법중첩 목록의 모든 요소를 ​​곱하는 방법

>>> series 
[{'data': [2, 4, 6, 8], 'name': 'abc'}, {'data': [5, 6, 7, 8], 'name': 'efg'}] 
>>> 

: 나는 목록을 포함 사전의 다음 목록을 가지고있다.

내가 가진 그래서 경우 :

>>> x = 100 

코드가 발생한다 :

>>> series 
[{'data': [200, 400, 600, 800], 'name': 'abc'}, {'data': [500, 600, 700, 800], 'name': 'efg'}] 

내 제한된 지식을 가지고 올 수있는 최선이는 (내가 알지도 못하는 것을 "[:]") :

>>> for s in series: 
...  s['data'][:] = [j*x for j in s['data']] 
... 
>>> 

어떻게 for 루프를 제거 할 수 있습니까?

코드에 대한 설명이나 문서에 대한 포인터도 좋을 것입니다.

감사합니다.

+2

왜할까요 /은'for' 루프를 제거 할 필요가? – Amber

+0

기술적으로 여기에 2 개의 for 루프가 있습니다 (목록 comp에 하나).나는 둘 다를 제거하는 것이 가능하다고 생각하지 않지만, 그것을 제거 할 수는 있습니다. – mVChr

답변

0

어떻게 for 루프를 제거 할 수 있습니까?

당신은 목록과 딕셔너리 함축의 조합으로 루프를 제거 할 수 있습니다

>>> [{k:[j*100 for j in v] if k == 'data' else v for k,v in d.items()} 
    for d in series] 
[{'data': [200, 400, 600, 800], 'name': 'abc'}, {'data': [500, 600, 700, 800], 'name': 'efg'}] 

그러나이 덜 읽고 더 이상 현재 위치에서 곱셈을 수행합니다.

그래서 나는 루프를 제거하지 말아야한다고 생각합니다. 대신에 이미하고있는 일을 계속해야합니다.

코드에 대한 설명이나 문서에 대한 포인터도 좋을 것입니다.

위의 코드를 설명하는 것이 적절하지 않다고 생각합니다. 우리가 이미 찾고있는 것이 아니기 때문에. 그러나 아마도 기존 코드에서 [:]이 무엇을하는지 알고 싶을 것입니다.

+0

글쎄, OP는 그들이 수정을 원한다고 말했 다. (원래 목록에 대한 참조가 있으면 뭔가 바람직하다). 그래서'[:]'는 목적을 수행합니다. – Amber

+0

@Amber : 오, 고마워, 나는 그것을 보지 못했다. 내 대답은 제 자리에서 작업을 수행하기 위해 쉽게 수정할 수 없다고 생각합니다. –

0

당신은 map를 사용하여 지능형리스트에서 for 루프를 제거 할 수 있습니다 : 그 동안, 난 세부 사항에 대해 설명이 관련 질문, 당신을 참조

for s in series: 
    s['data'] = map(lambda d: d*x, s['data']) 
0

목록의 각 요소를 통해 승수를 매핑합니다.

series = [{'data': [2, 4, 6, 8], 'name': 'abc'}, {'data': [5, 6, 7, 8], 'name': 'efg'}] 
x=100 

def mult_elements(series, x): 
    for s in series: 
     s['data']= map(lambda y:y*x, s['data']) 
    return series 

print mult_elements(series, x) 

지능형리스트와 하나 라이너로 수행 :

series = [{'data': map(lambda y:y*x, s['data']), 'name':s['name']} for s in series] 
관련 문제