python - 如何构造 for 循环以给我正确的输出?生成的列表比应有的长
问题描述
我有两个列表 (tb_shade
和tb_sun
),我正在尝试遍历它们,如果满足条件或不满足条件,则将 a 附加1
到第三个列表 ( activity_status
) 中0
。 tb_shade
和列表的tb_sun
长度相同(8760)。我正在尝试activity_status
创建第三0
个tb_shade
列表tb_sun
(1
在那个范围内。我已经尝试了几种不同的方法。我在下面列出了其中的两个尝试。两者都不起作用。
0
即使我知道有时满足条件,第一次尝试也会附加到列表中的所有行。第二次尝试的输出activity_status
列表长度为 122268322 个值。它应该与 8760 的tb_sun
和tb_shade
列表相同。有谁知道如何让它运行?任何帮助或提示将不胜感激!谢谢!
第一次尝试
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
解决方案
您在迭代中使用迭代,这为您提供了您期望的结果的平方。即,它不是从 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
推荐阅读
- c - 有人可以解释这是如何工作的吗?
- azure - Azure 函数中的 Microsoft.Identity.Web
- python - Python中的十进制模块
- python - imaplib.py:“NoneType”对象没有“替换”属性
- ios - 更改另一个屏幕上的按钮的约束 Swift
- flutter - Flutter form TextFormField 在一个单独的类中
- javascript - 使用 AWS javascript SDK V3,是否有等效的凭证提供程序链?
- python - Python selenium 获取复制到剪贴板的值
- maven - Artifactory - 将日期时间随机添加到工件名称
- python - 控制台命令 py 和 python 不起作用 Windows