我如何遍历字符串?

时间:2020-08-12 23:10:00

标签: python loops literate-programming

我有类似这样的代码

'''

phi = (QubitOperator('X0') + 
       QubitOperator('Y0') +
       QubitOperator('Z0') + 
       QubitOperator('X1') +
       QubitOperator('Y1') +
       QubitOperator('Z1') )

'''

其中QubitOperator是我使用的软件包中的命令。如何自动执行此操作以遍历X Y和Z以及0、1、2 ...并创建phi?

1 个答案:

答案 0 :(得分:0)

您现有的代码可能更简洁,但是假设您必须对8个以上的元素执行此操作:

from functools import reduce

letters = ['X', 'Y', 'Z']
numbers = ['0', '1', '2']
pairs = [f'{l}{n}' for l in letters for n in numbers]
# this gets you ['X0', 'X1', 'X2', 'Y0', ..., 'Z2']
qubits = [QubitOperator(x) for x in pairs]
# not sure the best way to get this into a single phi. join seems logical, but probably doesn't work.
phi = reduce(lambda acc, cur: acc + cur, pairs)

代码概述:

  1. 前三行基本上只是定义数据并将它们合并在一起。列表理解是一种2层(非官方术语),因此它将遍历字母,然后遍历数字,直到达到所有9个元素
  2. 第4行(从{{1}开始,将成对创建的每个字符串都包装在QubitOperator中。从技术上讲是不需要的,如果我为自己编码,我可能会将其放在第3行中。
  3. 如前所述,
  4. 第5行不一定是最好的方法,但这是我能想到的最好的方法。 qubits = [...基本上允许您将内容列表压缩为其他内容-在这种情况下,我们将把所有内容连接到phi中。这将遍历qubit列表并将它们加在一起。扩展此功能将使您接近已经完成的工作:reduce正如评论者所指出的,在这种情况下,for循环也可以工作。该代码如下所示:
QubitOperator('X0') + QubitOperator('X1')+...

这里有一个警告:我不是100%肯定这会起作用。最后一步之前的每一步都应该,而且我认为最后一步也应该如此,但是没有任何测试,就很难知道。

此外,如您所见,我们有效地将8行直接代码转换为4行相对复杂的代码。我不确定权衡是否值得,除非您有大量数据,否则您需要经常用新数据重复此过程。