我试图采取一个字符串,并将其附加到每个字符串包含在一个列表,然后有一个新的列表与完成的字符串。例子:

list1 = ['foo', 'fob', 'faz', 'funk']
string = 'bar'

*magic*

list2 = ['foobar', 'fobbar', 'fazbar', 'funkbar']

我尝试了for循环,并尝试了列表理解,但它是垃圾。一如既往,任何帮助,非常感谢。


当前回答

new_list = [word_in_list + end_string for word_in_list in old_list]

使用诸如“list”这样的名称作为变量名是不好的,因为它将覆盖/覆盖内置。

其他回答

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']

以python的方式运行下面的实验:

[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

以防万一

list = ['foo', 'fob', 'faz', 'funk']
string = 'bar'
for i in range(len(list)):
    list[i] += string
print(list)

最简单的方法是使用列表推导式:

[s + mystring for s in mylist]

注意,我避免使用像list这样的内置名称,因为这会掩盖或隐藏内置名称,这非常不好。

此外,如果你实际上不需要一个列表,而只是需要一个迭代器,生成器表达式可能会更有效(尽管这对短列表来说可能无关紧要):

(s + mystring for s in mylist)

这些功能非常强大、灵活且简洁。每个优秀的python程序员都应该学会使用它们。

结合地图和格式:

>>> list(map('{}bar'.format,  ['foo', 'fob', 'faz', 'funk']))
['foobar', 'fobbar', 'fazbar', 'funkbar']

因此,没有循环变量。 它适用于Python 2和Python 3。(在Python 3中可以写[*map(…)],而在Python 2中只需写map(…)。

如果有人喜欢模表达式

>>> list(map('%sbar'.__mod__,  ['foo', 'fob', 'faz', 'funk']))
['foobar', 'fobbar', 'fazbar', 'funkbar']

可以使用__add__方法进行前置

>>> list(map('bar'.__add__,  ['foo', 'fob', 'faz', 'funk']))
['barfoo', 'barfob', 'barfaz', 'barfunk']