[英]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.