为什么没有打印任何内容?

时间:2019-06-06 18:33:46

标签: python python-3.x

我正在尝试打印“#”之后的列表元素中的所有内容,但我一直在获取

  

“ ValueError:“#”不在列表中”

即使它就在那里,我也能看到吗?我在做什么错了?

前一段时间我使用相同的索引函数完成了此操作,但它又恢复了正常工作,因此我感到非常困惑。

data=["123#4567"]

print (data[data.index("#"):])

2 个答案:

答案 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("#"):])