通过在python单行中的旧列表的每个值上附加前缀来创建新列表

时间:2019-09-16 14:49:20

标签: python

a = ('A', 'B', 'C')

a = [(x, '#' + x) for x in a]
print(a)

当前输出:

[('A', '#A'), ('B', '#B'), ('C', '#C')]

所需的输出:

['A', '#A', 'B', '#B', 'C', '#C']

如何使用单线方式避免多行for循环?

4 个答案:

答案 0 :(得分:2)

您可以使用nested list comprehension

a = ('A', 'B', 'C')

result = [xi for x in a for xi in (x, '#' + x)]

print(result)

输出

['A', '#A', 'B', '#B', 'C', '#C']

答案 1 :(得分:0)

您可以使用嵌套的理解:

a = ('A', 'B', 'C')

a = [y for x in a for y in (x, '#'+x)]

print(a)

输出:

['A', '#A', 'B', '#B', 'C', '#C']

答案 2 :(得分:0)

尝试一下:

a = ('A', 'B', 'C')
result = []
for i in a:
    result.append(i)
    result.append(f'#{i}')

print(result)

答案 3 :(得分:0)

尝试通过写出一组for循环(其中包含单个append,并可能包含一个条件)来最好地解决此类问题。我发现操纵完全展开的循环要容易得多,如果格式正确,则转换为理解是微不足道的。例如,您当前的尝试看起来像这样:

result = []
for x in a:
    result.append((x, '#' + x))

您不是在列表中配对,而是尝试做类似的事情

result = []
for x in a:
    result.append(x)
    result.append('#' + x)

虽然这种形式不适合单行理解,但我们可以将其改写为

result = []
for x in a:
    result.extend((x, '#' + x))

由于这完全满足您的要求,并且list.extend等效于嵌套循环,因此您有解决方案:

result = []
for x in a:
    for y in (x, '#' + x):
        result.append(y)

将此循环转换为理解力几乎与删除冒号和换行符并在其周围放一些方括号一样简单。请记住,嵌套循环以它们写出时出现的顺序完全进入理解范围:

result = [y for for x in a for y in (x, '#' + x)]

解决方案本身非常简单,但是希望这种解释可以帮助您考虑如何在环境中更独立地将循环转换为理解力。 未来。