【问题标题】:How to use next() function (in python 3.7.2 )while iterating a list that contains duplicates?如何在迭代包含重复项的列表时使用 next() 函数(在 python 3.7.2 中)?
【发布时间】:2023-03-14 10:32:01
【问题描述】:

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

我想随机选择任何一个链并在字符串中补充它们(意味着将 H 更改为 V 或 V 更改为 H)。

例如,如果我拿起chain1,那么我的字符串将是p = '25HVHV74V6HV8VH' 如果我拿起chain4,那么我的字符串将是p ='25VHVH74V6HV8HV强>'

总结:

输入:'25VHVH74V6HV8VH'

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

目前我可以得到每个链起始的索引。然后使用 list.index() 我应该替换其中一个,但我认为它不是实现我想要的有效方法。我被这个事实困住了......

    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']}

输入:'25VHVH74V6HV8VH'

预期输出:“25HVHV74V6HV8VH”或“25VHVH74H6HV8VH”或“25VHVH74V6VH8VH”或“25VHVH74V6HV8HV”

【问题讨论】:

  • 我认为您的问题与您的标题不符,或者至少在任何地方都很难找到“next()”函数的用法。

标签: python loops iterator


【解决方案1】:

最后我自己找到了解决方案。就在这里!!!!

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

测试输入:2HV1H37HVHV6V8VHV9

输出1:2HV1V37HVHV6V8VHV9

输出2:2HV1H37HVHV6V8HVH9

输出3:2HV1H37HVHV6H8VHV9

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-19
    • 2017-09-17
    • 1970-01-01
    • 2023-03-06
    • 2018-07-11
    • 1970-01-01
    • 2011-11-26
    相关资源
    最近更新 更多