10 개의 요소를 보유 할 수있는 빈 목록 (또는 가장 좋은 방법)을 만들고 싶습니다.
그 후 그 목록에 값을 할당하고 싶습니다. 예를 들어 0에서 9까지 표시해야합니다.
s1 = list();
for i in range(0,9):
s1[i] = i
print s1
그러나이 코드를 실행하면 오류가 발생하거나 다른 경우에는 []
(비어 있음) 표시됩니다 .
누군가 이유를 설명 할 수 있습니까?
답변
lst[i] = something
목록이 최소한 i+1
요소로 초기화되지 않은 경우 와 같은 목록에 할당 할 수 없습니다 . 추가를 사용하여 목록 끝에 요소를 추가해야합니다. lst.append(something)
.
(사전을 사용하는 경우 할당 표기법을 사용할 수 있습니다).
빈 목록 만들기 :
>>> l = [None] * 10
>>> l
[None, None, None, None, None, None, None, None, None, None]
위 목록의 기존 요소에 값 지정 :
>>> l[1] = 5
>>> l
[None, 5, None, None, None, None, None, None, None, None]
같은 무언가가 있다는 사실을 숙지 l[15] = 5
우리의 목록에 10 요소가로 여전히 실패합니다.
range (x)는 [0, 1, 2, … x-1]에서 목록을 만듭니다.
# 2.X only. Use list(range(10)) in 3.X.
>>> l = range(10)
>>> l
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
함수를 사용하여 목록 만들기 :
>>> def display():
... s1 = []
... for i in range(9): # This is just to tell you how to create a list.
... s1.append(i)
... return s1
...
>>> print display()
[0, 1, 2, 3, 4, 5, 6, 7, 8]
목록 이해 (범위에 대해이 모든 것을 수행 할 필요가 없으므로 사각형을 사용하면을 반환 할 수 있음 range(0,9)
) :
>>> def display():
... return [x**2 for x in range(9)]
...
>>> print display()
[0, 1, 4, 9, 16, 25, 36, 49, 64]
답변
대신 이것을 시도하십시오 :
lst = [None] * 10
위의 그림은 각 위치가로 초기화되는 크기 10의 목록을 만듭니다 None
. 그런 다음 요소를 추가 할 수 있습니다.
lst = [None] * 10
for i in range(10):
lst[i] = i
틀림없이, 그것은 파이썬 작업 방식이 아닙니다. 더 나은 방법 :
lst = []
for i in range(10):
lst.append(i)
또는 더 간단한 Python 2.x에서는 0에서 9 사이의 값으로 목록을 초기화하기 위해이 작업을 수행 할 수 있습니다
lst = range(10)
그리고 파이썬 3.x에서 :
lst = list(range(10))
답변
varunl의 현재 허용되는 답변
>>> l = [None] * 10
>>> l
[None, None, None, None, None, None, None, None, None, None]
숫자와 같은 비 참조 유형에 적합합니다. 불행히도 목록 목록을 만들려면 참조 오류가 발생합니다. Python 2.7.6의 예 :
>>> a = [[]]*10
>>> a
[[], [], [], [], [], [], [], [], [], []]
>>> a[0].append(0)
>>> a
[[0], [0], [0], [0], [0], [0], [0], [0], [0], [0]]
>>>
보시다시피 각 요소는 동일한 목록 객체를 가리키고 있습니다. 이 문제를 해결하기 위해 각 위치를 다른 객체 참조로 초기화하는 메소드를 만들 수 있습니다.
def init_list_of_objects(size):
list_of_objects = list()
for i in range(0,size):
list_of_objects.append( list() ) #different object reference each time
return list_of_objects
>>> a = init_list_of_objects(10)
>>> a
[[], [], [], [], [], [], [], [], [], []]
>>> a[0].append(0)
>>> a
[[0], [], [], [], [], [], [], [], [], []]
>>>
함수를 작성하는 대신이 작업을 수행하는 기본 내장 파이썬 방법이있을 수 있지만 그 기능이 무엇인지 잘 모르겠습니다. 기꺼이 정정 해 드리겠습니다!
편집 : 그것은 [ [] for _ in range(10)]
예 :
>>> [ [random.random() for _ in range(2) ] for _ in range(5)]
>>> [[0.7528051908943816, 0.4325669600055032], [0.510983236521753, 0.7789949902294716], [0.09475179523690558, 0.30216475640534635], [0.3996890132468158, 0.6374322093017013], [0.3374204010027543, 0.4514925173253973]]
답변
당신은 할 수 .append(element)
목록, 예를하려면 다음 s1.append(i)
. 현재하려는 s1[i]
것은 존재하지 않는 요소 ( )에 액세스하는 것 입니다.
답변
두 가지 “빠른”방법이 있습니다.
x = length_of_your_list
a = [None]*x
# or
a = [None for _ in xrange(x)]
나타납니다 [None]*x
빠르다 :
>>> from timeit import timeit
>>> timeit("[None]*100",number=10000)
0.023542165756225586
>>> timeit("[None for _ in xrange(100)]",number=10000)
0.07616496086120605
당신이 범위 (예에 확인하는 경우하지만 [0,1,2,3,...,x-1]
), 다음 range(x)
가장 빠른 수 있습니다 :
>>> timeit("range(100)",number=10000)
0.012513160705566406
답변
빈 목록을 만드는 간단한 방법을 제안하는 사람이 아무도 없습니다. 이것은 오래된 스레드이지만 완전성을 위해 이것을 추가합니다. 빈 목록 10 개가 생성됩니다.
x = [[] for i in range(10)]
답변
(이것은 질문의 원래 버전을 기반으로 작성되었습니다.)
10 개의 요소를 보유 할 수있는 빈 목록 (또는 가장 좋은 방법)을 만들고 싶습니다.
사용 가능한 메모리 제한에 따라 모든 목록에 원하는 수의 요소가 포함될 수 있습니다. 문제 목록의 유일한 “크기”요소의 수를 현재 그것입니다.
그러나 내가 그것을 실행하면 결과는 []입니다
print display s1
유효한 구문이 아닙니다. 당신이보고있는 것을 당신의 설명에 따라, 나는 당신이 의미 가정 display(s1)
다음과 print s1
. 이를 실행 s1
하려면 함수에 전달할 전역 을 미리 정의해야합니다 .
전화를 걸면 display
전달한 목록이 작성된대로 수정되지 않습니다. 당신의 코드는 ” s1
함수에 전달 된 것의 이름입니다. 이제 우리가 할 첫 번째 일은 그 일을 완전히 잊어 버리고 s1
새로 생성 된 것을 참조하기 시작 list
합니다. 이제 우리는 그것을 수정할 것입니다. list
“. 전달한 값에는 영향을 미치지 않습니다.
여기에 값을 전달할 이유가 없습니다. (실제로 함수를 작성해야 할 이유는 없지만 요점 옆에 있습니다.) 무언가를 “생성”하고자하므로 함수의 출력이됩니다. 설명하는 것을 만드는 데 정보가 필요하지 않으므로 정보를 전달하지 마십시오. 정보를 얻으려면,return
십시오.
그것은 당신에게 다음과 같은 것을 줄 것입니다 :
def display():
s1 = list();
for i in range(0, 9):
s1[i] = i
return s1
다음 문제는 range
함수 가 끝점을 건너 뛰기 때문에 목록에 실제로 9 개의 요소 만 있다는 것 입니다. 참고 []
로 list()
세미콜론은 불필요 s1
하고 변수의 이름이 좋지 않으며 range
에서 시작 하는 경우 하나의 매개 변수 만 필요합니다 0
.
def create_list():
result = list()
for i in range(10):
result[i] = i
return result
그러나 여전히 마크가 없습니다. range
그런데 언어의 일부 일부 마법의 키워드되지 않습니다 for
및 def
하지만, 대신이 함수의이. 그리고 그 함수가 무엇을 반환하는지 맞춰보십시오. 맞습니다-정수 목록입니다. 따라서 전체 기능이
def create_list():
return range(10)
이제 우리는 왜 함수를 직접 작성할 필요가 없는지 알 수 있습니다. range
이미 찾고있는 기능입니다. 다시, 목록을 “사전 크기 조정”할 필요는 없습니다.