gpt4 book ai didi

Python 迭代问题!

转载 作者:太空狗 更新时间:2023-10-30 02:23:44 26 4
gpt4 key购买 nike

我这里有这段代码,它应该从列表 n1 和 n2 中删除公共(public)字母。但是当我运行这段代码时,它只运行一次,因为它只从 n1 和 n2 中删除了 'a' 而没有删除 'k'。

澄清一下,这段代码应该始终只对 2 个词起作用。

name1 = "abdjek"
name2 = "doarhsnk"

n1l = list(name1)
n2l = list(name2)

for i in range(len(n1l)):
for j in range(len(n2l)):
if n1l[i] == n2l[j]:
n1l.pop(i)
n2l.pop(j)
n1l.append('0')
n2l.append('1')

好吧,等等,它似乎适用于上述 2 个名称,但是当我有 name1 = "naveen"和 name2 = "darshana"时,它不起作用!

最佳答案

我建议一个更简单的方法:

def removecommon(name1, name2):
common = set(name1).intersection(name2)
res1 = ''.join(n for n in name1 if n not in common)
res2 = ''.join(n for n in name2 if n not in common)
return res1, res2

n1, n2 = removecommon('naveen', 'darshana')
print n1, n2

根据需要发出 vee drsh

编辑:正如 OP 现在指定的那样(在评论中——请记得也编辑您的问题,哦 OP!)他实际上只想删除first出现在每个普通字母的每个词中,所需的算法当然是完全不同的。一个简单的方法(如果单词的长度不是太长是可行的):

def removefirstcommon(name1, name2):
common = set(name1).intersection(name2)
n1 = list(name1)
for c in common: n1.remove(c)
n2 = list(name2)
for c in common: n2.remove(c)
return ''.join(n1), ''.join(n2)

一个更精细的方法(虽然对于正常长度的单词来说速度较慢)对于极长的单词来说会更快(因为下面是 O(N) 而前者是 O(N 平方)):

def removefirstcommonlongwords(name1, name2):
common = set(name1).intersection(name2)
def mustrem(c, copycom):
res = c not in copycom
copycom.discard(c)
return res
cop = set(common)
n1 = [c for c in name1 if mustrem(c, cop)]
n2 = [c for c in name2 if mustrem(c, common)]
return ''.join(n1), ''.join(n2)

关于Python 迭代问题!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2173238/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com