저는 파이썬을 처음 접했고 다음과 같은 사실을 알아 냈습니다.두리스트의 파이썬 곱셈
>>> 'D'*1
'D'
따라서 나는 우리가 곱셈을하고 문자열을 결합 할 수 있는지 여부를 궁금해
>>> print(choice)
[1, 1, 1, 1]
>>> print(A)
['D', 'e', '0', '}']
내 원하는 출력이 될 것이다 (선택에 대 한 요소는 0 또는 1 만 가능) 'De0}'
저는 파이썬을 처음 접했고 다음과 같은 사실을 알아 냈습니다.두리스트의 파이썬 곱셈
>>> 'D'*1
'D'
따라서 나는 우리가 곱셈을하고 문자열을 결합 할 수 있는지 여부를 궁금해
>>> print(choice)
[1, 1, 1, 1]
>>> print(A)
['D', 'e', '0', '}']
내 원하는 출력이 될 것이다 (선택에 대 한 요소는 0 또는 1 만 가능) 'De0}'
당신이 할 수있는 explicity 목록을 mulitply 지퍼에 넣은 다음 결과에 합치십시오.
''.join([c * i for c, i in zip(A, choice)])
zip()
function은 A
의 문자를 choice
의 정수와 쌍을 이루고, 목록 내포는 그 문자를 정수에 곱합니다. str.join()
call은 그 결과를 하나의 문자열로 결합합니다. 기초하여 상기 제 반복자에서 선택 요소 : 당신이하고자했다 정확하게 수행
from itertools import compress
''.join(compress(A, choice))
compress()
을 :
choice
하는 경우가 그냥 에 사용가 요소를 선택 사용, 여기 itertools.compress()
를 사용하여 더 나은 두 번째 iterable의 해당 값은 true 또는 false입니다.
데모 : itertools.compress()
를 사용
>>> choice = [1, 1, 1, 1]
>>> A = ['D', 'e', '0', '}']
>>> ''.join([c * i for c, i in zip(A, choice)])
'De0}'
>>> choice = [0, 1, 0, 1]
>>> ''.join([c * i for c, i in zip(A, choice)])
'e}'
>>> from itertools import compress
>>> ''.join(compress(A, choice))
'e}'
는 입니다 훨씬 빨리 여기 옵션 :
4 배 속도 증가의>>> import timeit
>>> import random
>>> A = [chr(random.randrange(33, 127)) for _ in range(1000)]
>>> choice = [random.randrange(2) for _ in range(1000)]
>>> def with_mult(A, choice):
... return ''.join([c * i for c, i in zip(A, choice)])
...
>>> def with_compress(A, choice):
... return ''.join(compress(A, choice))
...
>>> timeit.timeit('f(A, choice)', 'from __main__ import A, choice, with_mult as f', number=10000)
1.0436905510141514
>>> timeit.timeit('f(A, choice)', 'from __main__ import A, choice, with_compress as f', number=10000)
0.2727453340048669
.
물론 우리는 생성기 표현식으로도 할 수 있습니다. '' '.join (c는 i, zip은 ('De0) ', [1, 1, 1, 0])' –
@ PM2Ring 'str.join'을 사용할 때 생성자 표현식과 대조적으로리스트 이해력을 사용하는 것이 더 좋은 이유에 대해서는 http://stackoverflow.com/a/9061024/3005188을 참조하십시오. – Ffisegydd
@ PM2Ring :하지만 'str.'str.join()'은 두개의 스캔을하는리스트 객체를 가져야하기 때문에 join()'call *은 더 느립니다. 하나는 총 크기를 결정하기위한 것이고, 하나는 실제 문자열을 만드는 것입니다. –
str.join
및 zip
과 함께 list comprehension을 사용할 수 있습니다. 예를 들어 아래를 참조하십시오 :
choice = [1, 1, 1, 0]
A = ['D', 'e', '0', '}']
out = ''.join([n*c for n, c in zip(choice, A)])
print(out)
# De0
를 선택의 4 요소가 인쇄되지 않습니다 A
('}')의 4 요소가 0이기 때문에.
'choice = [1,1,1,2]'이면 무엇이 인쇄됩니까? – Ffisegydd
다른 문제가 있습니다. 내 scenrio 나는 그 사용자가 확인란을 가지고 싶습니다. 항목이 선택되면 1, 그렇지 않으면 0입니다. 따라서이 경우에만 0 또는 1입니다. – useR
@useR :이 경우에는 여기에 곱할 필요가 없습니다. 그냥 '압축'을 사용하십시오; 요소를 선택하거나 '선택'에있는 요소의 진리 값에 따라 무시하십시오. –