1
destinism 2020-12-18 10:53:35 +08:00
B in A 吧
|
2
galileo1214 2020-12-18 10:55:22 +08:00
isin
|
3
whitefox027 2020-12-18 10:58:46 +08:00
if B in A :
|
6
ly4572615 2020-12-18 11:01:26 +08:00
那用正则吧
|
7
kevinfk2 OP @galileo1214 我试试
|
8
ly4572615 2020-12-18 11:02:14 +08:00
或者 find()方法
|
11
LiKanKan 2020-12-18 11:09:53 +08:00 via Android
A:str = "aabbcc"
B:str = "abbc" if A.find(B) == -1: #找不到为-1,如果找到则为第一个出现的位置 print("B is not in A") else: print("A contains B") |
13
HashV2 2020-12-18 11:52:07 +08:00
@kevinfk2 如果你是只是想无序的判断 B 列表内所有的元素在不在另 A 列表中遍历就好了:
all([ele in A for ele in B]) 如果想有序判断可以先在 A 中找到 B 的第一个元素的所有的索引 按照 B 的长度从索引切片后和 B 比较,如果有一个为真就是有序包含了 |
14
LiKanKan 2020-12-18 12:08:47 +08:00 via Android 1
@kevinfk2 如果是 List[str]可以用"".join(A 或 B)转化成上面一种情况。如果包含其他种类元素:如果连续有序,就手写子串匹配;如果不连续有序,就遍历 B,对着 A 的元素找;如果不连续也不有序,反之,对遍历 A 找 B
|
15
no1xsyzy 2020-12-18 12:38:56 +08:00
|
16
009694 2020-12-18 12:56:59 +08:00 via iPhone
为啥要用 find 不用 in 。。find 比 in 慢得多 (从 js 转的还是 java 转的?
|
17
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 |
19
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/ |
20
ipwx 2020-12-18 14:44:07 +08:00
在做一些根据先验知识的预处理。比如后缀“有限公司”或者“公司”就先全部删掉。
|
21
JeffGe 2020-12-18 14:47:23 +08:00 via Android 1
if any(i in s2 for s2 in sheet2.col_values(0)):
|
22
owtotwo 2020-12-18 14:48:44 +08:00 via Android 1
你得先定义什么是“相似” 再谈其他的
|
24
lanshee 2020-12-18 14:59:57 +08:00
if A in B or B in A 这样行不?
|
26
sudoy 2020-12-18 15:04:12 +08:00
我看你好像只遍历一个数据,两个都要遍历。
``` a = ['苹果', '橘子', '香蕉', ‘葡萄’] b = ['苹果', ‘越南橘’, '香蕉', '椰子'] c = [] for x in a: for y in b: if x == y: c.append(x) ``` |
27
sudoy 2020-12-18 15:09:26 +08:00
或者
a = ['苹果', '橘子', '香蕉', ‘葡萄’] b = ['苹果', ‘越南橘’, '香蕉', '椰子'] c = [x for x in a if x in b] c 应该就是你要找的 |
28
sudoy 2020-12-18 15:10:30 +08:00
>>> a = ['apple', 'orange', 'banana']
>>> b = ['apple', 'grape', 'banana'] >>> c = [x for x in a if x in b] >>> c ['apple', 'banana'] |
29
sudoy 2020-12-18 15:20:20 +08:00 1
如果你要模糊匹配,可以为:
>>> a = ['apple', 'orange', 'banana'] >>> b = ['apple', 'grape', 'fresh banana'] >>> c = [] >>> for x in a: ...............for y in b: ........................if x == y or x in y: ...............................c.append(x) |
31
sudoy 2020-12-18 15:28:35 +08:00
@lanshee 嗯,我前面没看清楚,最后一个回复里面考虑到得了。不过这里面还有特殊字符的问题,另外还有可能要把名字拆开匹配,比如“某某公司”和“某某有限责任公司”属于同一家公司,那么就要把前面拆成四个字,后面拆成八个字,如果后面那八个字都包含前面四个字,就是满足条件
|
32
duzhor 2020-12-18 15:28:38 +08:00
你这个 if 的意思是如果 sheet1 的元素在 sheet2 的列表里面。所以要加一层 for 去遍历 sheet2,再把 sheet1 里的每个元素依次跟 sheet2 里的每个元素比较。
|
33
TimePPT 2020-12-18 15:40:47 +08:00 1
字符串匹配策略遇到
翰硕电子 | 翰碩電子 这种 case 你没法解的 |
35
xuqiccr 2020-12-18 15:50:20 +08:00
BTW,处理 Excel 试试 pandas
|
37
krixaar 2020-12-18 17:22:00 +08:00
如果真的只是差“有限公司”或者“有限责任公司”这样,可以直接把另一边的数据先处理了再比对。
问题是规则是不是就这么简单,比如碰到农行、农发行、农业银行、农业发展银行这样的。 |
38
HelloViper 2020-12-21 11:24:27 +08:00
以前的公司名匹配度算法供参考:
https://github.com/verarong/CompanyNameMatch |