我正在尝试打印“#”之后的列表元素中的所有内容,但我一直在获取
“ ValueError:“#”不在列表中”
即使它就在那里,我也能看到吗?我在做什么错了?
前一段时间我使用相同的索引函数完成了此操作,但它又恢复了正常工作,因此我感到非常困惑。
data=["123#4567"]
print (data[data.index("#"):])
答案 0 :(得分:2)
data = ['123#4567']
data = [d.split('#')[1] for d in data]
print (data)
Python 3.7.3 (default, Mar 27 2019, 09:23:15)
[Clang 10.0.1 (clang-1001.0.46.3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> data = ['123#4567']
>>> data = [d.split('#')[1] for d in data]
>>> print (data)
['4567']
由于列表包含字符串,因此变量d是字符串。因此,d.split('#')[1]
调用字符串的split()方法。对于documentation,此方法的第一个参数是分割的字符串。该方法返回执行拆分后得到的字符串列表,因此[1]
返回结果列表中的第二个拆分字符串。
即['4567']
答案 1 :(得分:1)
它看起来不像,但是使用它的方式,data
的行为就像一个嵌套列表:
[ # this is a list
"123#4567" # this is a string, which sometimes acts like a list
]
因此,当您执行data.index('#')
时,python会说“好吧,data
中有一个元素是"123#4567"
,而不是"
,因此抛出错误是因为我找不到我想要的元素”。
如果要分割字符串或正确找到索引,则需要在列表内 并获取字符串本身。可以明确地做到这一点:
data = ["123#4567"]
print(data[0][data[0].index("#"):]) # data[0] holds the string
反复地,如果data
要容纳多个字符串:
data = ["123#4567", "987#6543"]
print(elem[elem.index("#"):] for elem in data) # iterate over every string in data, which would work even if data only contained one string
或仅将data
设置为字符串:
data = "123#4567"
print(data[data.index("#"):])