簡體   English   中英

查找 python 中的所有反向對

[英]Find all reverse pairs in python

定義function rev_pair(slist),其參數是一個列表,列表的所有元素都是字符串。 這個 function 返回另一個列表,返回列表的所有元素都是來自 slist 的兩個字符串的元組,並且相互反轉。 在 slist 中首先出現的字符串在該元組的左側,后面出現的字符串在右側。 左邊 slist 中最先出現的字符串元組在返回值列表中最先出現,相同的字符串在返回值中只出現一次。

字符串中的所有字符都是大小寫字母或 0 到 9。

[例子]

輸入:['abc','ded','cba','ffa']

output :[('abc','cba'),('ded','ded')]

這是我的代碼,但仍然是錯誤的答案

def rev_pair(slist):
    def isrev(s1,s2):
        if s2[::-1] == s1:
            return True
        else:
            return False
    res = []
    for i in range(len(slist)):
        for u in range(i, len(slist)):
            if isrev(slist[i], slist[u]):
                if not (slist[i], slist[u]) in res:
                    res.append((slist[i], slist[u]))
                    break
    return res
slist = []
exec('slist=' + input())
print(rev_pair(slist))

這是您要實現的目標的簡短版本:

def revevers_list(l):
    new_l = []
    for item in l:
        if len(item) == len(set(item)):
            new_l.append((item, item[::-1]))
    return new_l

slist = input().split(",")
print(revevers_list(slist))

測試結果:

>> python app.py
abc, def, ddt
[('abc', 'cba'), (' def', 'fed ')]

嘗試這樣的事情

def rev_pair(input_list):
    """
    Function that checks coincidence between input list elements and reversed string of element in same list.
    """
    output = []
    for string in input_list:
        reversed_string = string[::-1]
        for string_ in INPUT:
            if reversed_string == string_:
                output.extend([(string, reversed_string)])
    return output

out = rev_pair(input_list = ['abc', 'ded', 'cba', 'ffa'])
out

結果是

[('abc', 'cba'), ('ded', 'ded'), ('cba', 'abc')]

我認為這個版本有點pythonic:

def find_reversed_pairs(data):
    values_count = dict()

    for value in data:
        reversed_value = value[::-1]
        values_count[value] = values_count.get(value, 0) + 1
        if reversed_value in values_count:
            values_count[reversed_value] = values_count.get(reversed_value, 0) + 1

    return [(val, val[::-1]) for val, count in values_count.items() if count >= 2]

這是一個示例 output:

['abc', 'def', 'cba', 'ffa', 'fed'] => [('abc', 'cba'), ('def', 'fed')]
['abc', 'ded', 'cba', 'ffa'] => [('abc', 'cba'), ('ded', 'ded')]

問題都來自對唯一性的要求:

定義function rev_pair(slist),其參數是一個列表,列表的所有元素都是字符串。 這個 function 返回另一個列表,返回列表的所有元素都是來自 slist 的兩個字符串的元組,並且相互反轉。 在 slist 中首先出現的字符串在該元組的左側,后面出現的字符串在右側。 左邊 slist 中最先出現的字符串元組在返回值列表中最先出現,相同的字符串在返回值中只出現一次。

在我的代碼中,如果輸入是['abc','cba','cba','abc'] ,則 output 將是[('abc','cba'), ('cba', abc')]根據要求這是錯誤的。 然后簡單地去掉第二個元組就可以解決這個問題。

這是新代碼。(仍然沒有效率)

def rev_pair(slist):
    def isrev(s1,s2):
        if s2[::-1] == s1:
            return True
        else:
            return False
    res = []
    for i in range(len(slist)):
        for u in range(i, len(slist)):
            if isrev(slist[i], slist[u]):
                if (slist[i], slist[u]) in res or (slist[u], slist[i]) in res:  # new modification
                    continue
                else:
                    res.append((slist[i], slist[u]))
                    break
    return res


slist = []
exec('slist=' + input())
print(rev_pair(slist))

暫無
暫無

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

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