68

我有一个 Python 中的字符串列表 - elements。我想elementelements. 请参阅下面的代码(它不起作用,但您会明白的):

for element in elements:
    element = "%" + element + "%"

有没有办法做到这一点?

4

7 回答 7

110
elements = ['%{0}%'.format(element) for element in elements]
于 2011-08-19T20:16:42.783 回答
21

您可以使用列表理解:

elements = ["%" + e + "%" for e in elements]
于 2011-08-19T20:16:10.613 回答
7

您可以使用列表推导:

elements = ["%{}%".format(element) for element in elements]
于 2011-08-19T20:16:31.490 回答
4

基本上有两种方法可以做你想做的事:要么编辑你拥有的列表,要么创建一个包含你想要的更改的新列表。目前那里的所有答案都显示了如何使用列表理解(或 a map())来构建新列表,我同意这可能是要走的路。

另一种可能的方法是遍历列表并就地编辑它。如果列表很大并且您只需要更改一些,您可能会这样做。

for i, e in enumerate(elements):
    if want_to_change_this_element(e):
        elements[i] = "%{}%".format(e)

但正如我所说,我建议您使用列表理解答案之一。

于 2011-08-19T20:29:28.847 回答
4

Python 3.6+ 版本(f 字符串):

elements = [f'%{e}%' for e in elements]
于 2021-02-09T08:11:00.197 回答
3
elements = map(lambda e : "%" + e + "%", elements)
于 2011-08-19T20:21:01.913 回答
0

这里还有一些例子

char = ['g:', 'l:', 'q:']

使用替换

for i in range(len(char)):
    char[i] = char[i].replace(':', '')

使用带

for i in range(len(char)):
    char[i] = char[i].strip(':')

使用函数

def list_cleaner(list_):
    return [char_.strip(':') for char_ in list_]


new_char = list_cleaner(char)
print(new_char)

使用生成器功能(如果您有大量数据,建议使用)

def generator_cleaner(list_):
    yield from (char_.strip(':') for char_ in list_)

# Prints all results in once
gen_char = list(generator_cleaner(char))

# Prints as much as you need, in this case only 8 chars
# I increase a bit the list so it makes more sense
char = ['g:', 'l:', 'q:', 'g:', 'l:', 'q:', 'g:', 'l:', 'q:']

# let's call our Generator Function
gen_char_ = generator_cleaner(char)

# We call only 8 chars
gen_char_ = [next(gen_char_) for _ in range(8)]
print(gen_char_)
于 2020-12-17T21:18:36.040 回答