使用Python切片列表映射d时出现问题

2024-10-01 09:39:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我的一项新任务要求我将数据从一种格式转换或映射到另一种格式,通常是从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',...

Tags: inidif格式notthis条件else
3条回答

您正在比较字符串。看看这些对比:

>>> "23"<"3"
True
>>> "04"<"3"
True

我想你想比较一下整数值。试试这个: ... 如果int(csvitem[63:64])<;=3: ... 等等

您正在比较字符串,可能需要比较数字。使用int()

if int(csvitem[63]) <= 3:

也许您还需要重构代码以消除太多的if。例如,您可以执行以下操作:

^{pr2}$

对于代码中的第一个if链也可以这样做。但是,在这种情况下,最好使用您的选项构建dict,然后将其用作:

choices_dict = {'1':'<4 hours', ...}
hsa_id = choices_dict.get(cvsitem[63], '')

当您告诉python进行比较时,它很少会抱怨。如果你告诉它把一根线和一根香蕉比较,它可能会告诉你一根比另一根大,但答案对你来说毫无意义。在

你在比较字符串和数字。你应该比较数字和数字:

>>> "3" < "20"
False
>>> "3" < "20"
False
>>> int("3") < int("20")
True

在比较之前把你的字符串转换成数字,你会没事的。在

相关问题 更多 >