簡體   English   中英

我嘗試在我的函數中更新列表值,但它沒有更新任何值

[英]I try to update list value inside my function, but it doesnt update any value

def find_ana(s):
    word_dict, number, pointer = {}, {}, {}
    a = list(set(s))
    answer = []
    for i in range(len(a)):
        word_dict[a[i]] = []
        number[a[i]] = 0
        pointer[a[i]] = 0

    for i in range(len(s)):
        word_dict[s[i]].append(i)
        number[s[i]] += 1
        pointer[s[i]] += 1
        answer.append("c")
    sssss = max(number, key=number.get)
    if number[sssss] > len(s):
        answer = "IMPOSSIBLE"
        return answer
    else:
        while len(number) != 0:
            m = max(number, key=number.get)

            number_m = number[m]
            number.pop(m, None)
            n = min(pointer, key=pointer.get)
            number_n = word_dict[n]
            pointer.pop(n, None)

            while number_m != 0:
                ba = number_n.pop()
                answer[ba] = m
                number_m = number_m - 1
                if len(number_n) == 0:
                    n = min(pointer, key=pointer.get)
                    pointer.pop(n, None)
                    number_n = word_dict[n]
                elif number_m == 0 and len(number_n) != 0:
                    pointer[n] = len(number_n)
        return answer

您好,這是我的代碼,用於找出任何位置都沒有多余字母的字符串。 在里面我更新了 pointer[b]=len(number_n) 但它根本沒有改變。 你能告訴我如何更新它以便我得到答案嗎? 就像我放了字符串,想要得到一個按新順序排列的字母列表 st s[I]!=answer[I]。 例如我把 ['s','t','a','r','t'] 並想得到 ['t','s','t','a','r'] ,但我只有 ['c','c','c','c','c']

如果我理解正確的話,您需要一個函數,它以沒有與原始單詞匹配的字符(相同位置的相同字母)的方式對給定字符串進行混洗。

一種方法是

import random


def shuffle_word(word, max_attempts=1000):
    letters = list(word)
    for attempt in range(max_attempts):
        random.shuffle(letters)
        new_word = "".join(letters)
        if not any(a == b for (a, b) in zip(word, new_word)):
            return new_word
    raise RuntimeError("Could not find a suitable variation")


print(shuffle_word("start"))

並獲得與此規則匹配的所有排列,

import itertools

def get_word_variations(word):
    letters = tuple(word)
    for combo in itertools.permutations(letters):
        if not any(a == b for (a, b) in zip(letters, combo)):
            yield "".join(combo)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM