跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 关于 Python 表达包含与被包含的语法
未分類
28 12 月 2020

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

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

資深大佬 : kevinfk2 5

例如两个数据对比

A: aabbcc

B: abbc

如果 A 包含 B,就输出 。

用什么表达语法啊

新手求解,大佬莫怪

大佬有話說 (38)

  • 資深大佬 : destinism

    B in A 吧

  • 資深大佬 : galileo1214

    isin

  • 資深大佬 : whitefox027

    if B in A :

  • 主 資深大佬 : kevinfk2

    @destinism B in A 好像只能对比完全一致的两个数据,我想对比的是两个类似的数据。不知道用什么表达好

  • 資深大佬 : zeroDev

    @kevinfk2 #4 就是这样用的,你自己试试

  • 資深大佬 : ly4572615

    那用正则吧

  • 主 資深大佬 : kevinfk2

    @galileo1214 我试试

  • 資深大佬 : ly4572615

    或者 find()方法

  • 主 資深大佬 : kevinfk2

    @ly4572615 不太会我找找用法试下先

  • 資深大佬 : destinism

    @kevinfk2 那只能正则了

  • 資深大佬 : LiKanKan

    A:str = “aabbcc”
    B:str = “abbc”
    if A.find(B) == -1:
    #找不到为-1,如果找到则为第一个出现的位置
    print(“B is not in A”)
    else:
    print(“A contains B”)

  • 主 資深大佬 : kevinfk2

    @LiKanKan 那如果是对 list 而言的话,该怎么用啊

  • 資深大佬 : HashV2

    @kevinfk2 如果你是只是想无序的判断 B 列表内所有的元素在不在另 A 列表中遍历就好了:
    all([ele in A for ele in B])
    如果想有序判断可以先在 A 中找到 B 的第一个元素的所有的索引
    按照 B 的长度从索引切片后和 B 比较,如果有一个为真就是有序包含了

  • 資深大佬 : LiKanKan

    @kevinfk2 如果是 List[str]可以用””.join(A 或 B)转化成上面一种情况。如果包含其他种类元素:如果连续有序,就手写子串匹配;如果不连续有序,就遍历 B,对着 A 的元素找;如果不连续也不有序,反之,对遍历 A 找 B

  • 資深大佬 : no1xsyzy

    @HashV2 把方括号去掉获得空间和时间提升( compl 换成 compg,不需要存储整个 list,第一个为 False 的地方直接退出)
    当然,从可读性上来说,如果都是 hashable 的话,推荐 set(A) > set(B)

    @kevinfk2 list 就是正常手写循环啊(
    的确有双层 compg 的黑魔法,但可读性太垃圾了。

  • 資深大佬 : 009694

    为啥要用 find 不用 in 。。find 比 in 慢得多 (从 js 转的还是 java 转的?

  • 資深大佬 : JeffGe

    >>> A = [1, 1, 2, 2, 1, 1]
    >>> B = [1, 2, 2, 1]
    >>> str(B)[1:-1] in str(A)
    True

  • 主 資深大佬 : kevinfk2

    @LiKanKan 看了下还没弄明白,我加了附言,可能更方便你帮我解答,有时间的话帮我看看呗

  • 資深大佬 : ipwx

    你需要某种字符串相似度计算的算法,比如编辑距离( edit distance )

    https://leetcode.com/problems/edit-distance/
    https://pypi.org/project/editdistance/0.3.1/

  • 資深大佬 : ipwx

    在做一些根据先验知识的预处理。比如后缀“有限公司”或者“公司”就先全部删掉。

  • 資深大佬 : JeffGe

    if any(i in s2 for s2 in sheet2.col_values(0)):

  • 資深大佬 : owtotwo

    你得先定义什么是“相似” 再谈其他的

  • 主 資深大佬 : kevinfk2

    @JeffGe 感谢大佬,出效果了 十分感谢!

  • 資深大佬 : lanshee

    if A in B or B in A 这样行不?

  • 主 資深大佬 : kevinfk2

    @lanshee 好像不行吧 我没试 in 好像都是查完全一致的才行

  • 資深大佬 : sudoy

    我看你好像只遍历一个数据,两个都要遍历。

    “`
    a = [‘苹果’, ‘橘子’, ‘香蕉’, ‘葡萄’]
    b = [‘苹果’, ‘越南橘’, ‘香蕉’, ‘椰子’]

    c = []
    for x in a:
    for y in b:
    if x == y:
    c.append(x)
    “`

  • 資深大佬 : sudoy

    或者

    a = [‘苹果’, ‘橘子’, ‘香蕉’, ‘葡萄’]
    b = [‘苹果’, ‘越南橘’, ‘香蕉’, ‘椰子’]
    c = [x for x in a if x in b]

    c 应该就是你要找的

  • 資深大佬 : sudoy

    >>> a = [‘apple’, ‘orange’, ‘banana’]
    >>> b = [‘apple’, ‘grape’, ‘banana’]
    >>> c = [x for x in a if x in b]
    >>> c
    [‘apple’, ‘banana’]

  • 資深大佬 : sudoy

    如果你要模糊匹配,可以为:

    >>> 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)

  • 資深大佬 : lanshee

    @sudoy 你这个少遍历了吧,这个是全量匹配了.他的需求应该是当前单词在不在另一组的单词里,而不是在另一组里

  • 資深大佬 : sudoy

    @lanshee 嗯,我前面没看清楚,最后一个回复里面考虑到得了。不过这里面还有特殊字符的问题,另外还有可能要把名字拆开匹配,比如“某某公司”和“某某有限责任公司”属于同一家公司,那么就要把前面拆成四个字,后面拆成八个字,如果后面那八个字都包含前面四个字,就是满足条件

  • 資深大佬 : duzhor

    你这个 if 的意思是如果 sheet1 的元素在 sheet2 的列表里面。所以要加一层 for 去遍历 sheet2,再把 sheet1 里的每个元素依次跟 sheet2 里的每个元素比较。

  • 資深大佬 : TimePPT

    字符串匹配策略遇到
    翰硕电子 | 翰碩電子
    这种 case 你没法解的

  • 資深大佬 : est

    @TimePPT 正解了。

    所以 LZ 这个事其实还是手动做的好。。

  • 資深大佬 : xuqiccr

    BTW,处理 Excel 试试 pandas

  • 主 資深大佬 : kevinfk2

    @est 这只是个例子 要处理的数据有几 w 个

  • 資深大佬 : krixaar

    如果真的只是差“有限公司”或者“有限责任公司”这样,可以直接把另一边的数据先处理了再比对。
    问题是规则是不是就这么简单,比如碰到农行、农发行、农业银行、农业发展银行这样的。

  • 資深大佬 : HelloViper

    以前的公司名匹配度算法供参考:
    https://github.com/verarong/CompanyNameMatch

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具