如何测试一个字符串是否是另一个字符串的子序列?
发布时间:2020-12-20 10:34:46 所属栏目:Python 来源:网络整理
导读:参见英文答案 Finding subsequence (nonconsecutive)????????????????????????????????????3个 如何测试一个字符串是否是另一个字符串的子序列? 这是一个比子串更弱的条件.例如,’iran’不是’爱尔兰’的子串,但它是一个子序列IRelANd.区别在于子序列不必是
参见英文答案 >
Finding subsequence (nonconsecutive)????????????????????????????????????3个
如何测试一个字符串是否是另一个字符串的子序列? 这是一个比子串更弱的条件.例如,’iran’不是’爱尔兰’的子串,但它是一个子序列IRelANd.区别在于子序列不必是连续的. 更多例子: >’印度尼西亚’包含’印度’.印度尼西亚 移动:我的朋友喜欢文字游戏.昨天我们玩了“国家内的国家”.如果我们错过任何配对,我很好奇. 编辑:如果您不熟悉子序列的数学定义
解决方法def is_subseq(x,y): it = iter(y) return all(any(c == ch for c in it) for ch in x) assert is_subseq('india','indonesia') assert is_subseq('oman','romania') assert is_subseq('mali','malawi') assert not is_subseq('mali','banana') assert not is_subseq('ais','indonesia') assert not is_subseq('ca','abc') 也适用于任何迭代: assert is_subseq(['i','n','d','i','a'],['i','o','e','s','a']) UPDATE Stefan Pochmann建议这样做. def is_subseq(x,y): it = iter(y) return all(c in it for c in x) 两个版本都使用迭代器;迭代器产生在前一次迭代中未产生的项目. 例如: >>> it = iter([1,2,3,4]) >>> for x in it: ... print(x) ... break ... 1 >>> for x in it: # `1` is yielded in previous iteration. It's not yielded here. ... print(x) ... 2 3 4 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |