【问题标题】:Value Error: Item not in List when it clearly is值错误:项目不在列表中,但显然是
【发布时间】:2015-01-04 05:43:02
【问题描述】:

我有一个列表,abbreviations,里面装满了字符串对象。我正在尝试调用列表中字符串的.index。当我用字符串调用.index 方法时,我得到一个ValueError:'LING'不在列表中,而它显然在列表中。

我的代码:

for item in abbreviations:
    print item

print abbreviations.index("LING")

为什么“LING”不存在,而它清除存在?我添加了以下代码行,它在“缩写”中搜索字符串的索引。我很困惑——“LING”显然在我的缩写列表中。

编辑(附加代码):

import csv 

myfile = open("/Users/it/Desktop/Classbook/classAbrevs.csv", "rU")

lines = [tuple(row) for row in csv.reader(myfile)]

longSubjectNames = [] 
abbreviations = [] 

masterAbrevs = []
for item in lines:
    longSubjectNames.append(item[0])
    abbreviations.append(item[1])

with open ("/Users/it/Desktop/Classbook/masterClassList.txt", "r") as myfile:
    masterSchedule = tuple(open("/Users/it/Desktop/Classbook/masterClassList.txt", 'r'))

for masterline in masterSchedule:
    masterline.strip()
    masterSplitLine = masterline.split("|")

    subjectAbrev = ""
    if masterSplitLine[0] != "STATUS":
        subjectAbrev = ''.join([i for i in masterSplitLine[2] if not i.isdigit()])
        masterAbrevs.append(subjectAbrev)

finalAbrevs = []
for subject in masterAbrevs:
    if (subject[-1] == 'W') and (subject[-2:] != 'UW'): 
        subject = subject[:-1]
    finalAbrevs.append(subject)

x = 0

for item in abbreviations:
    print item

print abbreviations.index("LING")

for item in finalAbrevs:
    if masterSplitLine[0] != "STATUS":
        concat = abbreviations.index(str(finalAbrevs[x]).strip())
        print "The abbreviation for " + str(item) + " is: " + longSubjectNames[concat]
    x = x + 1

输出:

masterAbrevs = []
for item in lines:
    longSubjectNames.append(item[0])
    abbreviations.append(item[1])

print '-'.join(abbreviations)

是:

ACA-ACCY-AFST-AMST-ANAT-ANTH-APSC-ARAB-AH-FA-ASTR-BIOC-BISC-BME-BMSC-BIOS-BADM-CHEM-CHIN-CE-CLAS-CCAS-COMM-CSCI-CFA-CNSL-CPED-DNSC-EALL-ECON-EDUC-ECE-EHS-ENGL-EAP-EMSE-ENRP-EPID-EXSC-FILM-FINA-FORS-FREN-GEOG-GEOL-GER-GREK-HCS-HSCI-HLWL-HSML-HEBR-HIST-HOMP-HONR-HDEV-HOL-HSSJ-ISTM-IDIS-IAD-INTD-IAFF-IBUS-ITAL-JAPN-JSTD-KOR-LATN-LAW-LSPA-LING	-MGT-MKTG-MBAD-MATH-MAE-MED-MICR-MMED-MSTD-MUS-NSC-ORSC-PSTD-PERS-PHAR-PHIL-PT-PA-PHYS-PMGT-PPSY-PSC-PORT-PSMB-PSYD-PSYC-PUBH-PPPA-REL-SEAS-SMPA-SLAV-SOC-SPAN-SPED-SPHR-STAT-SMPP-SUST-TRDA-TSTD-TURK-UW-WLP-WSTU
Traceback (most recent call last):
  File "/Users/it/Desktop/Classbook/sortClasses.py", line 25, in <module>
    with open ("/Users/it/Desktop/Classbook/masterClassList.txt", "r") as anything:
IOError: [Errno 2] No such file or directory: '/Users/it/Desktop/Classbook/masterClassList.txt'

【问题讨论】:

  • 您是否检查了前导/尾随空格?检查实际值,而不是打印时的样子。如果必须,请改用repr()
  • 不,它在我的机器上给出了正确的输出,你确定你已经初始化了列表吗?或者您可能在代码中某处使用了 index 变量,该变量已覆盖该属性,请粘贴整个代码 sn-p ?
  • 现在您的代码明显改变了。您的问题必须更加具体。我很确定您在代码中的某个地方做错了什么,否则成为这样的错误的可能性非常低。
  • 我已经在上面添加了我所有的代码。本质上,我的代码从主 .txt 中编译了一个缩写列表。然后它在我的“缩写”列表中搜索一个字符串,然后从我的第三个列表中打印匹配的索引。
  • with open ("/Users/it/Desktop/Classbook/masterClassList.txt", "r") as myfile: masterSchedule = tuple(open("/Users/it/Desktop/Classbook/masterClassList.txt", 'r')) 这显然是错误的

标签: python string list indexing


【解决方案1】:
myfile = open("/Users/it/Desktop/Classbook/classAbrevs.csv", "rU")

lines = [tuple(row) for row in csv.reader(myfile)]

longSubjectNames = [] 
abbreviations = [] 

masterAbrevs = []
for item in lines:
    longSubjectNames.append(item[0])
    abbreviations.append(item[1])

with open ("/Users/it/Desktop/Classbook/masterClassList.txt", "r") as myfile:

问题就在这里;

with open ("/Users/it/Desktop/Classbook/masterClassList.txt", "r") as myfile:

你在这里定义了myfile之前

myfile = open("/Users/it/Desktop/Classbook/classAbrevs.csv", "rU")

所以实际上abbreviations = [] 并没有从classAbrevs.csv 获取数据。因为它是从masterClassList.txt 获取数据,正如你用这一行定义的myfile

with open ("/Users/it/Desktop/Classbook/masterClassList.txt", "r") as myfile

这就是为什么您的字符串不在该列表中的原因。还有这一行;

for item in lines:
    longSubjectNames.append(item[0])
    abbreviations.append(item[1])

你确定item[1] 有你想要的所有字符串吗?

我尝试了这些代码,我只是从你的代码中复制粘贴,结果如下;

【讨论】:

  • 所以我改变了:"with open ("/Users/it/Desktop/Classbook/masterClassList.txt", "r") as myfile:" to with open ("/Users/it/Desktop /Classbook/masterClassList.txt", "r") as any:" 仍然出现同样的错误。
  • @NoMorePuppies,虽然您的建议确实是 OP 的错误,但不会影响 abbreviations 列表,因为 item[1] 应该有已经附加。它与 myfile 被分配给其他东西无关。
  • @NoMorePuppies 是的,我确定 item[1] 包含我需要的所有字符串。
【解决方案2】:

问题是,从你运行的结果来看:

“LING\t” 显示在您的列表中,而不是 “LING”

通过运行我得到所需的索引:

abbreviations.index("LING\t")

71

为了纠正这个问题,有很多方法可以去除 \t,我将展示其中一种:

abbreviations.append(item[1].strip())

通过更正此行,您的 item[1] 将在添加到您的 abbreviations 列表之前去除 \t

【讨论】:

  • strip 函数不剥离 /t 吗?
  • @PhilipMcQuitty, strip() 应该取出 \t 但是我看不到你在你的代码中实现了这个,让我更新我的回答是为了确保你知道该怎么做
猜你喜欢
  • 2017-07-11
  • 2020-03-02
  • 1970-01-01
  • 1970-01-01
  • 2013-05-01
  • 2019-08-16
  • 1970-01-01
  • 1970-01-01
  • 2019-02-15
相关资源
最近更新 更多