关于 Python 表达包含与被包含的语法

2020-12-18 10:36:15 +08:00
 kevinfk2
例如两个数据对比

A: aabbcc

B: abbc

如果 A 包含 B,就输出 。

用什么表达语法啊

新手求解,大佬莫怪
2998 次点击
所在节点    Python
38 条回复
destinism
2020-12-18 10:53:35 +08:00
B in A 吧
galileo1214
2020-12-18 10:55:22 +08:00
isin
whitefox027
2020-12-18 10:58:46 +08:00
if B in A :
kevinfk2
2020-12-18 10:59:17 +08:00
@destinism B in A 好像只能对比完全一致的两个数据,我想对比的是两个类似的数据。不知道用什么表达好
zeroDev
2020-12-18 11:00:44 +08:00
@kevinfk2 #4 就是这样用的,你自己试试
ly4572615
2020-12-18 11:01:26 +08:00
那用正则吧
kevinfk2
2020-12-18 11:01:45 +08:00
@galileo1214 我试试
ly4572615
2020-12-18 11:02:14 +08:00
或者 find()方法
kevinfk2
2020-12-18 11:07:04 +08:00
@ly4572615 不太会我找找用法试下先
destinism
2020-12-18 11:07:44 +08:00
@kevinfk2 那只能正则了
LiKanKan
2020-12-18 11:09:53 +08:00
A:str = "aabbcc"
B:str = "abbc"
if A.find(B) == -1:
#找不到为-1,如果找到则为第一个出现的位置
print("B is not in A")
else:
print("A contains B")
kevinfk2
2020-12-18 11:20:13 +08:00
@LiKanKan 那如果是对 list 而言的话,该怎么用啊
HashV2
2020-12-18 11:52:07 +08:00
@kevinfk2 如果你是只是想无序的判断 B 列表内所有的元素在不在另 A 列表中遍历就好了:
all([ele in A for ele in B])
如果想有序判断可以先在 A 中找到 B 的第一个元素的所有的索引
按照 B 的长度从索引切片后和 B 比较,如果有一个为真就是有序包含了
LiKanKan
2020-12-18 12:08:47 +08:00
@kevinfk2 如果是 List[str]可以用"".join(A 或 B)转化成上面一种情况。如果包含其他种类元素:如果连续有序,就手写子串匹配;如果不连续有序,就遍历 B,对着 A 的元素找;如果不连续也不有序,反之,对遍历 A 找 B
no1xsyzy
2020-12-18 12:38:56 +08:00
@HashV2 把方括号去掉获得空间和时间提升( compl 换成 compg,不需要存储整个 list,第一个为 False 的地方直接退出)
当然,从可读性上来说,如果都是 hashable 的话,推荐 set(A) > set(B)

@kevinfk2 list 就是正常手写循环啊(
的确有双层 compg 的黑魔法,但可读性太垃圾了。
009694
2020-12-18 12:56:59 +08:00
为啥要用 find 不用 in 。。find 比 in 慢得多 (从 js 转的还是 java 转的?
JeffGe
2020-12-18 13:19:26 +08:00
>>> A = [1, 1, 2, 2, 1, 1]
>>> B = [1, 2, 2, 1]
>>> str(B)[1:-1] in str(A)
True
kevinfk2
2020-12-18 14:28:06 +08:00
@LiKanKan 看了下还没弄明白,我加了附言,可能更方便你帮我解答,有时间的话帮我看看呗
ipwx
2020-12-18 14:42:51 +08:00
你需要某种字符串相似度计算的算法,比如编辑距离( edit distance )

https://leetcode.com/problems/edit-distance/
https://pypi.org/project/editdistance/0.3.1/
ipwx
2020-12-18 14:44:07 +08:00
在做一些根据先验知识的预处理。比如后缀“有限公司”或者“公司”就先全部删掉。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/736666

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX