我的一项新任务要求我将数据从一种格式转换或映射到另一种格式,通常是从xcel、csv或ms-mdb转换成xml、sql或是按照我得到的规范,所以通常每个映射都是不同的。作为Lisp的前身,我已经开始学习Python来实现这一点。我每天都在学习,而且在工作中也很开心。我一直在努力把我的大脑围绕在生成器和迭代器上,但还不确定什么时候需要它们,但这里是我遇到的问题。在
什么是正确的pythonic方法来使用一个切片中的值来测试某些条件,如果满足,那么就分配适当的值。当我尝试使用<;=进行if elif时,我没有得到想要的结果。下面的例子只是我为测试条件而创建的许多if-elif语句中的一个。在
#This works
hsa_id = ''
if "1" in csvitem[63:64]:
hsa_id = '<4 hours'
elif "2" in csvitem[63:64]:
hsa_id = '<4 hours'
elif "4" in csvitem[63:64]:
hsa_id = '4-8 hours'
elif "5" in csvitem[63:64]:
hsa_id = '4-8 hours'
elif "6" in csvitem[63:64]:
hsa_id = '4-8 hours'
elif "8" in csvitem[63:64]:
hsa_id = '8-16 hours'
elif "9" in csvitem[63:64]:
hsa_id = '8-16 hours'
elif "16" in csvitem[63:64]:
hsa_id = '16-24 hours'
elif "17" in csvitem[63:64]:
hsa_id = '16-24 hours'
elif "24" in csvitem[63:64]:
hsa_id = '16-24 hours'
elif "25" in csvitem[63:64]:
hsa_id = '>24 hours'
else:
hsa_id = ''
HOURSSINCEAWAKENING.append(hsa_id)
#This does not work. I tried removing the quotes. With and without the quotes I get all identical values.
hsa_id = ''
if csvitem[63:64] <= "3":
hsa_id = '<4 hours'
elif csvitem[63:64] <= "7":
hsa_id = '4-8 hours'
elif csvitem[63:64] <= "15":
hsa_id = '8-16 hours'
elif csvitem[63:64] <= "23":
hsa_id = '16-24 hours'
elif csvitem[63:64] > "23":
hsa_id = '>24 hours'
else:
hsa_id = ''
HOURSSINCEAWAKENING.append(hsa_id)
#Output from what does not work truncated for brevity as there are thousands of records.
['<4 hours', '<4 hours', '<4 hours', '<4 hours',...
您正在比较字符串。看看这些对比:
我想你想比较一下整数值。试试这个: ... 如果int(csvitem[63:64])<;=3: ... 等等
您正在比较字符串,可能需要比较数字。使用int()
也许您还需要重构代码以消除太多的if。例如,您可以执行以下操作:
^{pr2}$对于代码中的第一个if链也可以这样做。但是,在这种情况下,最好使用您的选项构建dict,然后将其用作:
当您告诉python进行比较时,它很少会抱怨。如果你告诉它把一根线和一根香蕉比较,它可能会告诉你一根比另一根大,但答案对你来说毫无意义。在
你在比较字符串和数字。你应该比较数字和数字:
在比较之前把你的字符串转换成数字,你会没事的。在
相关问题 更多 >
编程相关推荐