하나의 문자열을 가져 와서 목록에 포함 된 모든 문자열에 추가 한 다음 완성 된 문자열이있는 새 목록을 만들려고합니다. 예:
list = ['foo', 'fob', 'faz', 'funk']
string = 'bar'
*magic*
list2 = ['foobar', 'fobbar', 'fazbar', 'funkbar']
루프를 시도하고 목록 이해를 시도했지만 쓰레기였습니다. 언제나 그렇듯이 도움을 주시면 감사하겠습니다.
답변
이를 수행하는 가장 간단한 방법은 목록 이해입니다.
[s + mystring for s in mylist]
내장 이름을 사용 list
하지 않는 것이 좋습니다. 내장 이름을 숨기거나 숨기므로 그다지 좋지 않습니다.
또한 실제로 목록이 필요하지 않고 반복자가 필요한 경우 생성기 표현식이 더 효율적일 수 있습니다 (짧은 목록에서는 중요하지 않음).
(s + mystring for s in mylist)
이것들은 매우 강력하고 유연하며 간결합니다. 모든 훌륭한 파이썬 프로그래머는 그것들을 사용하는 법을 배워야합니다.
답변
my_list = ['foo', 'fob', 'faz', 'funk']
string = 'bar'
my_new_list = [x + string for x in my_list]
print my_new_list
인쇄됩니다 :
['foobar', 'fobbar', 'fazbar', 'funkbar']
답변
map
나에게 맞는 작업 도구 인 것 같습니다.
my_list = ['foo', 'fob', 'faz', 'funk']
string = 'bar'
list2 = list(map(lambda orig_string: orig_string + string, my_list))
에 대한 자세한 예는 기능 프로그래밍 도구에 대한 이 섹션 을 참조하십시오 map
.
답변
pythonic 방식으로 다음 실험을 실행하십시오.
[s + mystring for s in mylist]
다음과 같이 for 루프를 사용하는 것보다 ~ 35 % 빠릅니다.
i = 0
for s in mylist:
mylist[i] = s+mystring
i = i + 1
실험
import random
import string
import time
mystring = '/test/'
l = []
ref_list = []
for i in xrange( 10**6 ):
ref_list.append( ''.join(random.choice(string.ascii_lowercase) for i in range(10)) )
for numOfElements in [5, 10, 15 ]:
l = ref_list*numOfElements
print 'Number of elements:', len(l)
l1 = list( l )
l2 = list( l )
# Method A
start_time = time.time()
l2 = [s + mystring for s in l2]
stop_time = time.time()
dt1 = stop_time - start_time
del l2
#~ print "Method A: %s seconds" % (dt1)
# Method B
start_time = time.time()
i = 0
for s in l1:
l1[i] = s+mystring
i = i + 1
stop_time = time.time()
dt0 = stop_time - start_time
del l1
del l
#~ print "Method B: %s seconds" % (dt0)
print 'Method A is %.1f%% faster than Method B' % ((1 - dt1/dt0)*100)
결과
Number of elements: 5000000
Method A is 38.4% faster than Method B
Number of elements: 10000000
Method A is 33.8% faster than Method B
Number of elements: 15000000
Method A is 35.5% faster than Method B
답변
“문자열 목록에 문자열 목록 추가”로 비트 확장 :
import numpy as np
lst1 = ['a','b','c','d','e']
lst2 = ['1','2','3','4','5']
at = np.full(fill_value='@',shape=len(lst1),dtype=object) #optional third list
result = np.array(lst1,dtype=object)+at+np.array(lst2,dtype=object)
결과:
array(['a@1', 'b@2', 'c@3', 'd@4', 'e@5'], dtype=object)
dtype odject가 더 변환 될 수 있습니다 str
답변
파이썬에서 map 안에 람다를 사용할 수 있습니다. 회색 코드 생성기를 썼습니다.
https://github.com/rdm750/rdm750.github.io/blob/master/python/gray_code_generator.py
# 당신의 코드는 여기에 ”n-1 비트 코드 ”, 각 단어 앞에 0이 붙고 ” n-1 비트 코드는 역순으로, 각 단어 앞에 1이 붙습니다. ” ‘
def graycode(n):
if n==1:
return ['0','1']
else:
nbit=map(lambda x:'0'+x,graycode(n-1))+map(lambda x:'1'+x,graycode(n-1)[::-1])
return nbit
for i in xrange(1,7):
print map(int,graycode(i))
답변
더 많은 옵션으로 업데이트
list1 = ['foo', 'fob', 'faz', 'funk']
addstring = 'bar'
for index, value in enumerate(list1):
list1[index] = addstring + value #this will prepend the string
#list1[index] = value + addstring this will append the string
키워드를 ‘list’와 같은 변수로 사용하지 말고 이름을 ‘list’로 ‘list1’로 바꾸십시오.