我有一个位0和1的列表。我需要使用循环逐个迭代它并进行计算。这是代码:
bit=['1','0','0','1']
message=''.join(bit)
print (message)
if (message==1):
theta=0
else:
theta=45
HWPX=[0, math.cos(4*math.radians(theta)), math.sin(4*math.radians(theta)), 0]
print (HWPX)
但是,运行此代码后,将仅计算第一位。
结果应如下所示:
[0, 1.0, 0.0, 0], [0, -1.0, 1.2246467991473532e-16, 0],[0, -1.0, 1.2246467991473532e-16, 0],[0, 1.0, 0.0, 0]
如何产生期望的结果? 谢谢。
答案 0 :(得分:4)
我认为您需要遍历A4
的字符,可以尝试以下操作:
message
或将import math
bit=['1','0','0','1']
message=''.join(bit)
print (message)
result = []
for i in message:
if (i=='1'):
theta=0
else:
theta=45
HWPX=[0, math.cos(4*math.radians(theta)), math.sin(4*math.radians(theta)), 0]
result.append(HWPX)
print (result)
与list comprehension
和if
结合使用:
else
答案 1 :(得分:3)
在您的示例中,您在以下条件下将message
与整数进行比较:
if (message==1):
由于1
不是字符串'1'
,因此将永远无法工作。要解决此问题,您需要将==
与字符串进行比较:
if (message=='1'):
您还需要遍历这些位中的每一个,并将计算结果追加到列表中。您当前的示例不支持此操作。
解决此问题的一种简单方法是将theta映射存储在字典中,在bit
中的每个位上循环并附加正确的计算。您也无需事先将列表.join()
放入位字符串中,因为无论如何您都要遍历每个项目。设计决策可能是将其保留为字符串开头,例如'1001'
,但这取决于您。
演示:
import math
bit = ['1','0','0','1']
theta = {'0': 45, '1': 0}
result = []
for b in bit:
hwpx = [0, math.cos(4*math.radians(theta[b])), math.sin(4*math.radians(theta[b])), 0]
result.append(hwpx)
print(result)
输出:
[[0, 1.0, 0.0, 0], [0, -1.0, 1.2246467991473532e-16, 0], [0, -1.0, 1.2246467991473532e-16, 0], [0, 1.0, 0.0, 0]]
或作为列表理解:
result = [[0, math.cos(4*math.radians(theta[b])), math.sin(4*math.radians(theta[b])), 0] for b in bit]
通过在上述方法中使用字典,不需要任何条件,因为您可以根据找到的位字符串使用映射的theta值。然后,您只需要一个简单的循环和一些计算即可。
如果您不想在这里使用字典,那么条件条件就可以了:
import math
bit = ['1','0','0','1']
result = []
for b in bit:
theta = 0
if b == '0':
theta = 45
hwpx = [0, math.cos(4*math.radians(theta)), math.sin(4*math.radians(theta)), 0]
result.append(hwpx)
print(result)
# [[0, 1.0, 0.0, 0], [0, -1.0, 1.2246467991473532e-16, 0], [0, -1.0, 1.2246467991473532e-16, 0], [0, 1.0, 0.0, 0]]