查找列表元素是否存在于另一个字符串中

时间:2019-01-07 16:48:16

标签: python

我想检查字符串c中是否存在列表中存在的任何定界符。如果存在,则应基于定界符分割字符串,并应得到定界符的右部分。

我启动了一个EC2实例,并在下面的python代码下执行了它。

d=['[', ']', '(', ')', ',', '|', ' ']
c='csvfile|1234'
matching = [i for i in d if i in c]

if matching:
        v=c.split(i)[1]
        print(int(v))
else:
        print 'doesn\'t exists'

预期结果:1234
实际结果:

$python main.py
Traceback (most recent call last):
  File "main.py", line 5, in <module>
    v=c.split(i)[1]
IndexError: list index out of range

7 个答案:

答案 0 :(得分:0)

如果在第6行上定义了i,则可能不等于'|'i仅在第3行的列表理解内有用定义。到第6行,您不应期望它具有有用的值。

答案 1 :(得分:0)

i在循环之外,因此当您尝试通过它索引时,它没有定义。

答案 2 :(得分:0)

为什么要检查上下文中不存在的ii很好,但它指向字符串中的最后一个字符,而不是分隔符,您可以在分隔符上进行分割,而匹配是字符串中存在的分隔符列表。因此,假设只有一个定界符,那么在索引0上,我们就具有所需的定界符,您可以使用该定界符来分割字符串

d=['[', ']', '(', ')', ',', '|', ' ']
c='csvfile|1234'
matching = [i for i in d if i in c]

if matching:
        v=c.split(matching[0])[1]
        print(int(v))
else:
        print 'doesn\'t exists'

答案 3 :(得分:0)

尝试一下:

d = ['[', ']', '(', ')', ',', '|', ' ']
c = 'csvfile|1234'

matching = [i for i in d if i in c]

if matching:
    v = c.split(matching[0])[1]
    print(int(v))
else:
    print("doesn't exist")

输出:

1234

i替换为matching[0]。这将获得matching中的第一个元素,而不是i中的第一个元素,甚至不应该在该范围中定义它。

此外,我不确定您是使用Python 2还是3,因为您同时使用了print函数和语句。我将两个print都更改为Python 3,因此如有需要,请改回

答案 4 :(得分:0)

尝试:

import re
d=['[', ']', '(', ')', ',', '|', ' ']
c='csvfile|1234'
re.split('|'.join(d), c)[-1]

输出:

'1234'

答案 5 :(得分:0)

在生成器上使用next来查找第一个符号的索引并切成字符串:

d = ['[', ']', '(', ')', ',', '|', ' ']
c = 'csvfile|1234'

try:
    indx = next(i for i, x in enumerate(c) if x in d)
    print(c[indx+1:])
except StopIteration:
    print("does not exist")

# 1234

这也处理多个分隔符的情况。例如:'csvfile|12,3[4'仍为12,3[4

答案 6 :(得分:0)

尝试以下编写的代码可能会对您有所帮助:

gluOrtho2D