如何在迭代包含重复项的列表时使用next()函数(在python3.7.2中)?

2024-10-17 06:19:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个字符串,比如p='25VHVH74V6HV8VH'。这里VH,V,HV,VH被称为链。 链1=VH链2=V链3=HV链4=VH。你知道吗

我想随机选择任意一个链,并在字符串中补足它们(意味着将H改为V或V改为H)。你知道吗

例如,如果我选择chain1,那么我的字符串将是p='25HVHV74V6HV8VH'如果我选择chain4,那么我的字符串将是p='25vh74v6hv8HV'

总结:

输入:“25VH74V6HV8VH

输出:'25HVHV74V6HV8VH'或'25VHVH74H6HV8VH'或'25VHVH74V6VH8VH'或'25VHVH74V6HV8HV' '

现在我可以得到每个链的开始索引。然后使用列表.索引()我应该换一个,但我认为这不是达到我想要的效果的有效方法。我被这个事实困住了。。。你知道吗

    pe = list(enumerate(polish_exp))
    chain_pos = {}
    for i in pe:
        if i[1] in ['H','h','V','v']:
            chain_pos.update({i[0]:[i[1]]})
            count = 0
            for j in pe[pe.index(i)+1:]:
                if j[1] in ['H','h','V','v']:
                    chain_pos[i[0]].append(j[1])
                    count += 1
                else:
                    break
    print(chain_pos)

我目前得到的上述代码的输出

{2:['V'],4:['H'],8:['V','H'],9:['H'],11:['V'],13:['V','H'],14:['H']}

输入:“25VH74V6HV8VH”

预期输出:“25HV74V6HV8VH”或“25VH74H6HV8VH”或“25VH74V6VH8VH”或“25VH74V6HV8HV”


Tags: 方法字符串inposchain列表forif
1条回答
网友
1楼 · 发布于 2024-10-17 06:19:52

最后我自己找到了解决办法。就在这里!!!!你知道吗

def complement_chain(string):
    p = dict(enumerate(string))
    chain_pos = {}
    for i in p.keys():
        if p[i] in ['H','h','V','v']:
            if p[i-1] not in ['H','h','V','v']:
                chain_pos.update({i:[p[i]]})
                for j in list(p.keys())[i+1:]:
                    if p[j] in ['H','h','V','v']:
                        chain_pos[i].append(p[j])
                    else:
                        chain_pos.update({i:''.join(chain_pos[i])})
                        break
    chosen_chain_key = random.choice(list(chain_pos.keys()))
    transtable = str.maketrans('hHvV','vVhH')
    chain_pos.update({chosen_chain_key:chain_pos[chosen_chain_key].translate(transtable)})
    l = chosen_chain_key + len(chain_pos[chosen_chain_key])
    new_string = string[:chosen_chain_key] + chain_pos[chosen_chain_key] + string[l:]
    return new_string

测试输入:2HV1H37HV6V8VHV9

输出1:2HV1V37HV6V8VHV9

输出2:2HV1H37HV6V8HVH9

输出3:2HV1H37HV6H8VHV9

相关问题 更多 >