为什么此python函数在for循环中运行时跳过索引1到3而不迭代索引2

杰瑞·L

我编写了一个函数,以删除在两个字符串中重复的部分。我首先将字符串转换为列表,然后遍历两个列表以查找相同位置的字符是否相同。问题是进行迭代时,代码将跳过索引2。(例如:list =“ index”,迭代器在迭代“ i”之后跳至“ d”)。

我尝试使用“替换”方法进行字符串操作,但没有得到想要的结果。“替换”方法删除了我想要的零件。

def popp(s,t): 
    s_lis=list(s)
    t_lis=list(t)
    ind=0
    for i,j in zip(s_lis,t_lis):
        if i==j:
            s_lis.pop(ind)
            t_lis.pop(ind)
        else:ind+=1        
    return s_lis,t_lis

# test the code
print(popp('hackerhappy','hackerrank'))
expected result: ['h','p','p','y'] ['r','n','k']
actual result: ['k', 'r', 'h', 'a', 'p', 'p', 'y'], ['k', 'r', 'r', 'a', 'n', 'k']
Devesh库玛·辛格

首先,您应该使用itertools.zip_longest,它会从最长的子序列中拉出一个zip。您正在使用zip它,使您不需要的最短子序列成为拉链。
所以在我们的情况下

print(list(zip_longest(s_lis, t_lis)))
#[('h', 'h'), ('a', 'a'), ('c', 'c'), ('k', 'k'), ('e', 'e'), 
#('r', 'r'), ('h', 'r'), ('a', 'a'), ('p', 'n'), ('p', 'k'), ('y', None)]

然后,您应该使用另一个列表来追加非公共字符,而不是对您要通过进行迭代的同一列表进行操作,s_lis.pop(idx)因此,如果元组中的字符不匹配,那么如果不匹配则追加它们

from itertools import zip_longest
def popp(s,t):
    s_lis = list(s)
    t_lis = list(t)
    s_res = []
    t_res = []
    #Use zip_longest to zip the two lists
    for i, j in zip_longest(s_lis, t_lis):
        #If the characters do not match, and they are not None, append them 
        #to the list
        if i != j:
            if i!=None:
                s_res.append(i)
            if j!=None:
                t_res.append(j)
    return s_res, t_res

输出将如下所示:

print(popp('hackerhappy','hackerrank'))
#(['h', 'p', 'p', 'y'], ['r', 'n', 'k'])

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Python的for循环中的多个索引迭代

在 foreach 循环中跳过索引

Julia for循环中的迭代索引

PostgreSQL 索引运行时

元组的运行时索引

为什么此代码使用UndecidableInstances进行编译,然后生成运行时无限循环?

多个线程循环运行时如何影响索引

带有奇数索引跳过迭代的列表元素,为什么?

为什么此函数应用程序会在purescript中生成运行时错误?

紧急:运行时错误:索引超出范围1

awk:运行时错误:负字段索引$ -1

为什么此 VBA 代码运行时间过长?

为什么循环不迭代每一行?

python索引如何影响o-notation的运行时?

swift) 在 for 循环中,即使迭代最后一个索引,引用 .index(after: index) 也不会出错?为什么?

为什么这个 for 循环从索引 1 而不是索引 0 开始?

在Golang中,为什么这样的类型转换会导致运行时错误:索引超出范围?

为什么我的运行时错误索引超出范围,是对 Slice 还是 Map 的使用不当?

为什么我会在每次运行时都在单个特定迭代中再次发生的循环中收到错误?(来自HackerEarth的二进制查询问题)

为什么只有在第零个索引处进行迭代时,此for循环才起作用?

在函数参数中,为什么 (i++) 在 (i+1) 运行时出现错误

为什么#1 程序显示运行时错误而#2 运行正常?

在 for 循环中跳过迭代

此特定For循环的运行时间

当循环变量递增时,为什么不在 for 循环中跳过迭代?

跳过Python for循环中的可变迭代次数

索引之一在Python while循环中运行太远

为什么通过函数运行时请求返回错误?

为什么Left函数返回运行时错误'424'?