![](/img/trans.png)
[英]how to create all possible orders in a specific length from a list of strings
[英]create a specific list from strings
根據評論編輯:
我想使用字符串'ABC'
和'123'
創建列表
['A1','B2','C3','A3','C1']
邏輯是將第一個字符串與第二個字符串按順序配對,然后再次向后:
前進:A1,B2,C3前進:A3,B2,C1
B2
僅出現一次,因為最終列表應該是不同的值。
我應該能夠擴展兩個字符串中的每個字符串(它們的長度始終匹配)並具有相同的結果模式。
我嘗試了幾件事,但是我想知道是否還有一種更Python的方法來完成此任務。
以下解決方案可在Python 3.x中使用,
from collections import OrderedDict
s1 ='ABC'
s2 = '123'
result = list(OrderedDict.fromkeys(first + second for first, second in zip(s1 + s1, s2 + s2[::-1])))
print(result)
輸出量
['A1', 'B2', 'C3', 'A3', 'C1']
第一個解決方案假定您只需要重復一次可迭代。 如果必須多次重復最短的迭代,則可以使用循環對其進行多次迭代:
from itertools import cycle
s1 ='ABC'
s2 = '123'
seen = set()
result = []
for first, second in zip(cycle(s1), s2 + s2[::-1]):
first_second = first + second
if first_second not in seen:
seen.add(first_second)
result.append(first_second)
print(result)
輸出量
['A1', 'B2', 'C3', 'A3', 'C1']
第二種解決方案的想法是使用一組可見元素,並且僅在看不見的情況下才添加到最終結果中。 最后,您可以組合解決方案並使用cycle
和OrderedDict :
from itertools import cycle
from collections import OrderedDict
s1 ='ABC'
s2 = '123'
result = list(OrderedDict.fromkeys(first + second for first, second in zip(cycle(s1), s2 + s2[::-1])))
print(result)
輸出量
['A1', 'B2', 'C3', 'A3', 'C1']
如果版本大於3.6:
print(list(map(''.join,list(dict.fromkeys(list(zip(s1,s2))+list(zip(s1,s2[::-1])))))))
輸出:
['A1', 'B2', 'C3', 'A3', 'C1']
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.