根据评论进行了编辑:
我想使用字符串'ABC'
和'123'
创建列表
['A1','B2','C3','A3','C1']
逻辑是按顺序将第一个字符串与第二个字符串配对,然后再次向后:
向前:A1,B2,C3 向后:A3,B2,C1
B2
仅出现一次,因为最终列表应该是不同的值。
我应该能够扩展两个字符串中的每个字符串(它们的长度始终匹配)并具有相同的结果模式。
我尝试了几件事,但我想知道是否还有一种更Python化的方式来实现这一目标。
答案 0 :(得分:1)
以下解决方案将在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']
第一个解决方案假定您只需要重复一次可迭代。如果您必须多次重复最短的迭代,则可以使用cycle在其上迭代几次:
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']
第二个解决方案中的想法是使用set可见元素,并且仅在看不见的情况下添加到最终结果中。最后,您可以组合解决方案并使用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']
答案 1 :(得分:1)
如果版本大于3.6:
print(list(map(''.join,list(dict.fromkeys(list(zip(s1,s2))+list(zip(s1,s2[::-1])))))))
输出:
['A1', 'B2', 'C3', 'A3', 'C1']
答案 2 :(得分:0)