2014-10-13 2 views
3

중복 가능성이 있습니다 (죄송합니다). 나는 주변을 둘러 보았고 나의 대답을 찾을 수 없었다.한 줄에 n 개의 빈 문자열을 만듭니다.

한 줄에 n 빈 문자열 목록을 생성하고 싶습니다.

>>> list(str('') * 16) 
# [''] 
>>> list(str(' ') * 16) 
# [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '] 
# anything with a char in it is working 

아래 작업을하지만, 더 나은 방법이있다 :

나는 시도했다? list(str('' * 16))가 작동하지 않는 이유는 무엇입니까?

>>> [''] * 16 
['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', ''] 

S *의 N, S의 * S

N 얕은 복사 s은 서열 및 n이다

연접 :

>>> [str() for c in 'c' * 16] 
['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', ''] 
+0

사용'[ ''] * 16'. –

+0

@AshwiniChaudhary : 그 대답은 논평보다 더 낫지 않습니까? – DSM

+0

@DSM 나는 dup을 찾고 있었는데, 이것으로 충분하다고 생각한다 : [Python에서 n 회 반복되는 단일 항목 목록 만들기] (http://stackoverflow.com/questions/3459098/create-list-of-single -item-repeated-n-times-in-python) –

답변

5

Python standard types page보기 정수입니다. 이 연산 용 문서에서

전체 각주 : 0보다 N의

작은 값이 (들과 같은 유형의 빈 서열을 얻을 수 있음)을 0으로 처리한다. 사본은 얕습니다. 중첩 된 구조는 복사되지 않습니다. 이것은 종종 새로운 Python 프로그래머를 불러옵니다. 고려해야이 일어 났는지

>>> lists = [[]] * 3 
>>> lists 
[[], [], []] 
>>> lists[0].append(3) 
>>> lists 
[[3], [3], [3]] 

은 []은 [] 너무 세 요소의 빈 목록을 포함하는 하나의 요소리스트 있다는 * 3 (포인터까지)이있다 단일 빈 목록. 목록 요소 중 하나를 수정하면이 단일 목록이 수정됩니다. 당신은 다른 목록의 목록이 방법을 만들 수 있습니다

>>> lists = [[] for i in range(3)] 
>>> lists[0].append(3) 
>>> lists[1].append(5) 
>>> lists[2].append(7) 
>>> lists 
[[3], [5], [7]] 
+0

한숨. 고맙습니다. – sheeptest

+0

이것은 나를 미치게 만들었다. 한숨. 감사! –

2

는이 같은 목록을 곱 수 있습니다. ''불변이므로은 모두 동일한 문자열에 대한 참조임을 염려 할 필요가 없습니다.

[''] * 16 

변경 가능한 개체 (예 : 목록 또는 사전)에는 동일한 트릭을 사용할 수 없습니다. 당신은 당신의 마지막 버전 같은 것을 사용할 필요가

[mutable_thing() for c in range(16)] 

또는

[[] for c in range(16)] 

또는

[{} for c in range(16)] 
+1

+1이 위험하지 않은 이유를 설명합니다. – DSM

관련 문제