回答:
これを行う最も簡単な方法は、リスト内包表記を使用することです。
[s + mystring for s in mylist]
組み込み名をlist
隠したり隠したりするなど、組み込み名の使用を避けたことに注意してください。
また、リストが実際には必要なく、イテレータだけが必要な場合は、ジェネレータ式の方が効率的です(ただし、短いリストでは問題にならない可能性があります)。
(s + mystring for s in mylist)
これらは非常に強力で柔軟性があり、簡潔です。すべての優れたPythonプログラマーは、それらを使用する方法を学ぶ必要があります。
(s + mystring for s in mylist)
["{}) {}".format(i, s) for i, s in enumerate(mylist)]
list2 = ["mystring" + s for s in mylist]
=list2 = ['barfoo', 'barfob', 'barfaz', 'barfunk']
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']
次の実験を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に変換できます
at = np.full(fill_value='@',shape=1,dtype=object)
または単に: at = np.array("@", dtype=object)
Pythonのマップ内でラムダを使用できます。グレイコードジェネレータを書いた。 https://github.com/rdm750/rdm750.github.io/blob/master/python/gray_code_generator.py# ここにコードが入ります '' '各単語の前に0が付加されたn-1ビットコード、その後に逆順の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」に変更しました
list2 = ['%sbar' % (x,) for x in list]
list
名前として使用しないでください。組み込み型をシャドウします。
'%sbar' % (x,)
代わりに'%sbar' % x
?なんでx + 'bar'
?
list
組み込みなので、割り当てるのは賢明ではありません。