我有两个列表(tb_shade和tb_sun),我试图遍历它们,如果满足条件,则将1附加到第三个列表(activity_status),如果不满足,则附加0。tb_shade和tb_sun列表的长度相同(8760)。我正在尝试创建第三个长度相同的列表(activity_status),如果tb_shade或tb_sun列表中的任何一个值超出数值范围: 29-39,则该列表的值为0;如果两个值都在该范围内,则该列表的值为1。我已经尝试了几种不同的方法。我在下面列出了其中的两个尝试。两者都不起作用。
第一次尝试为列表中的所有行附加0,即使我知道有时会满足条件。第二次尝试的输出activity_status列表长度为122268322个值。它应该与tb_sun和tb_shade列表相同,这两个列表都是8760。有人知道怎么让它运行吗?如有任何帮助或建议,我们将不胜感激!谢谢!
第一次尝试
activity_status=[]
for i,q in zip(tb_shade, tb_sun):
if tb_shade[i] > (39) or tb_sun[q] < (29):
activity_status.append(0)
else:
activity_status.append(1)第二次尝试
activity_status=[]
for i in range(len(tb_shade)):
for q in range(len(tb_sun)):
if tb_shade[i] > 39 or tb_sun[q] < 29:
activity_status.append(0)
if tb_shade[i] < 39 or tb_sun[q] > 29:
activity_status.append(1)
print(len(activity_status)) #122268322
print(len(tb_shade)) #8760 发布于 2020-07-12 07:11:40
你的第二次尝试几乎是正确的。您已经嵌套了for循环,所以您实际要做的就是遍历tb_sun 8760次,并将每个数组中的每个值相互比较。试试这个:
activity_status=[]
for i in range(len(tb_shade)):
if tb_shade[i] > 39 or tb_sun[i] < 29:
activity_status.append(0)
if tb_shade[i] < 39 or tb_sun[i] > 29:
activity_status.append(1)
print(len(activity_status))
print(len(tb_shade))发布于 2020-07-12 07:36:19
你在一个迭代中使用了一个迭代,这给了你期望结果的平方。也就是说,它不是只从0到8759计数,而是从0到8759循环8760次。
相反,您可以使用一个for循环,并将其用于迭代两个列表。
其次,你的标准与你所写的并不是相互排斥的。例如,如果来自tb_shade和tb_sun的两个数字分别是30和50,则这两个if子句都满足并且都将执行。假设您正在尝试检查这两种情况下的数字是否在29和39之间,我对您的代码进行了一些更改。
activity_status=[]
for i in range(len(tb_shade)):
if tb_shade[i]>29 and tb_shade[i]<39 and tb_sun[i]>29 and tb_sun[i]<39:
activity_status.append(1)
else:
activity_status.append(0)
print(len(activity_status)) #should give 8760 if both lists are of length 8760
print(len(tb_shade)) #8760 发布于 2020-07-12 07:09:37
使用列表理解,如果表tb_shade和tb_sun中的值在29,39范围内,则该项为1。否则,该项为0。
activity_status = [1 if (29 <= shade <= 39 and 29 <= sun <= 39) else 0 for shade, sun in zip(tb_shade, tb_sun)]https://stackoverflow.com/questions/62855445
复制相似问题