Python中列表的迭代

时间:2018-07-31 03:34:08

标签: python loops

我有一个位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]

如何产生期望的结果? 谢谢。

2 个答案:

答案 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 comprehensionif结合使用:

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]]