【问题标题】:String search in python - two listspython中的字符串搜索 - 两个列表
【发布时间】:2019-09-29 21:51:20
【问题描述】:

假设我有一个字符串数组 A = ['abcbdefcd'] 和另一个字符串数组 T= ['ab', 'abc', 'def', 'cd', 'abcd']

我想写一个可以搜索数组A的函数,如果它在T中找到一个在A中的字符串,则返回true或false。

我想我会试试的

对于 A 中的文本:如果 T 中的文本:打印 (true)

否则:

打印(假)

但这并没有给我我正在寻找的东西,任何人都可以提出其他建议吗?

【问题讨论】:

  • 当您说 if it finds a string in T that is in A 时,是指字符串存在于列表 A 中还是表示该字符串作为子字符串存在于 A 的任何元素中?
  • 我想要一种方法来搜索 A 中的每个小字符串 T

标签: python arrays full-text-search


【解决方案1】:

针对您的具体要求:

a = ['abcbdefcd'] 
t = ['ab', 'abc', 'def', 'cd', 'abcd']

for text in t:
    print(text in a[0])

输出:

True
True
True
True
False

一些注意事项:

  1. 用小写字母命名变量
  2. 您可以使用 t = 'abcbdefcd' 代替 t = ['abcbdefcd'],代码将是 if text in t 而不是 if text in t[0]

【讨论】:

  • 谢谢 - 这就是我想要实现的目标
【解决方案2】:

这应该可以实现您的目标,

A =  ['abcbdefcd']

T =  ['ab', 'abc', 'def', 'cd', 'abcd']

result = False
for text in A:
    for sub_text in T:
        if (sub_text in text):
            result = True
            break

if (result):
    print('True')
else:
    print('False')

【讨论】:

    【解决方案3】:

    如果我正确理解了这个问题,您基本上是想找到 2 个列表的交集。如果列表 T 包含列表 A 中也存在的元素,则返回 true,否则返回 false。

    为此,您有多种 Pythonic 解决方案:

    方法一

    bool(set(a) & set(b))
    

    即。试试这样的。

    a = ['abc','bca','av']
    b = ['ab','bc']
    print(bool(set(a) & set(b))) # this would return true in this case
    

    另一种方法是使用生成器表达式对列表执行迭代:

    a = set(a); any(i in a for i in b)
    

    最后您可以使用冻结集的不相交方法:

    not set(a).isdisjoint(b)
    

    【讨论】:

      猜你喜欢
      • 2020-03-12
      • 2011-08-19
      • 2016-04-20
      • 2016-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-22
      相关资源
      最近更新 更多