2014-11-22 2 views
0

목록의 수, 목록의 수 및 목록의 길이를 알고 싶습니다. 나는 priory를 모르겠습니다. 목록의 유형은 str입니다. 어떻게 효율적으로이 작업을 수행 할 수 있습니까?동적으로 목록의 크기 목록

data = [[]] * number_of_needed_lists 
for line in f.readlines(): 
    columns = line.split(',') 
     for i, dta in enumerate(data): 
      data[i] = dta + [columns[i]] 

을하지만이 매우 느립니다 :

나는 시도했다. 나는 유사한 구조를 시도했지만 목록의 사전을 사용하여 비슷한 결과를 얻었다. 당신은 당신이 실제로하고있는 * 연산자를 사용할 때

data = [[] for i in range(number_of_needed_lists)] 

:

a = [[]] * 5 
a[0] += [1] 
a 
==> [[1], [1], [1], [1], [1]] 
expected: [[1],[],[],[],[]] 
+0

: 두 번째
, 당신은 그래서 listoflists를 만들기위한,리스트의 집합을 포함하는 목록을 사용할 수 있습니까? –

+0

@ IgnacioVazquez-Abrams 나는 CSV가 내가 필요한 것을하지 않았기 때문에 얼마 전에 이것을 바꿨다. 다시 시도 할 수 있습니다. 문제가 해결 될까요? 그래도이 방법으로 작동시키는 방법은 궁금합니다. – Bastiaan

답변

1

바꾸기 :

data = [[]] * number_of_needed_lists 

게다가, 나는 다음과 같은 이상한 행동을 발견 동일한 객체에 사본 (참조)을 사용하는 것 - 그 이유는 그 중 하나를 변경하십시오 - 모두 변경됩니다.

+0

Genius! 지금은 30 배 빨라서 받아 들일 수 있습니다. 나는이 참고 사업에 대해 철저히 이해했으면 좋겠다. 나는 참조가 무엇인지 이해하지만 장면 뒤에서 어떤 일이 일어나는지 냄새를 맡기 위해 ... – Bastiaan

0

먼저 목록의 길이를 알 필요가 없으며 목록에 항목을 추가하려면 list.append()을 사용하면됩니다. 왜`csv`를 사용하지 않는

listoflists = [] 
for i in range(1, number_of_needed_lists): 
    listoflists.append((range(i), 0)) 
+0

list.apend()는 list + = []와 같지 않습니까? – Bastiaan