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

在python单行中,通过在旧列表的每个值上添加前缀来创建一个新列表,python,Python,电流输出: a = ('A', 'B', 'C') a = [(x, '#' + x) for x in a] print(a) 期望输出: [('A', '#A'), ('B', '#B'), ('C', '#C')] 如何使用一行程序来避免多行for循环?您可以使用: 输出 您可以使用嵌套理解: ['A', '#A', 'B', '#B', 'C', '#C'] 输出: a = ('A', 'B', 'C') a = [y for x in a for y in (x, '#'+x

电流输出:

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

a = [(x, '#' + x) for x in a]
print(a)
期望输出:

[('A', '#A'), ('B', '#B'), ('C', '#C')]
如何使用一行程序来避免多行for循环?

您可以使用:

输出


您可以使用嵌套理解:

['A', '#A', 'B', '#B', 'C', '#C']
输出:

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

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

print(a)
试试这个:

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

这样的问题最好通过尝试写出一组for循环来解决,这些for循环中只有一个附加,可能还有一个条件。我发现操纵完全扩展的循环要容易得多,如果格式正确,转换为理解就很简单了。例如,您当前的尝试如下所示:

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

print(result)
您尝试执行以下操作,而不是列表中的配对

result = []
for x in a:
    result.append((x, '#' + x))
虽然这种形式本身不适合一行理解,但我们可以通过将其改写为

result = []
for x in a:
    result.append(x)
    result.append('#' + x)
因为这正是您想要的,并且list.extend相当于一个嵌套循环,所以您有了自己的解决方案:

result = []
for x in a:
    result.extend((x, '#' + x))
将此循环转换为理解几乎与删除冒号和换行符并在其周围放置一些方括号一样简单。请记住,嵌套循环在理解中的出现顺序与写出时的出现顺序完全相同:

result = []
for x in a:
    for y in (x, '#' + x):
        result.append(y)
这个解决方案本身非常简单,但希望这个解释能帮助您考虑如何更独立地将循环转换为理解
未来。

OP是在寻找一个线性。[x的x在x中为x,+x]这也给出相同的输出,有什么特殊的原因,你使用席而不是X吗?我不这么认为,外部x将被内部循环覆盖。
result = []
for x in a:
    result.extend((x, '#' + x))
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)]