Python 从字符串创建特定列表
根据评论编辑: 我想使用字符串“ABC”和“123”来创建列表Python 从字符串创建特定列表,python,string,loops,Python,String,Loops,根据评论编辑: 我想使用字符串“ABC”和“123”来创建列表 ['A1','B2','C3','A3','C1'] 逻辑是按顺序将第一个字符串与第二个字符串配对,然后再次向后: 转发:A1、B2、C3 向后:A3、B2、C1 B2仅出现一次,因为最终列表应为不同的值 我应该能够扩展两条线中的每一条,它们的长度总是匹配的,并且具有相同的结果模式 我尝试了一些方法,但我想知道是否有更具Python风格的方法来实现这一点。以下解决方案将在Python 3.x中运行 from collections
['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)
输出
第一个解决方案假设您只需要重复一次iterables。如果必须多次重复最短iterable,则可以使用它进行多次迭代:
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)
输出
第二种解决方案的思想是使用一组已看到的元素,如果未看到,则只添加到最终结果中。最后,您可以组合解决方案并使用cycle和:
输出
如果版本大于3.6:
print(list(map(''.join,list(dict.fromkeys(list(zip(s1,s2))+list(zip(s1,s2[::-1])))))))
输出:
['A1', 'B2', 'C3', 'A3', 'C1']
['A1', 'B2', 'C3', 'A3', 'C1']
我尝试了一些方法,但我想知道是否还有更多的方法
蟒蛇式的方法来实现这一点
不说你已经尝试了什么,很难提出一个替代方案,pythonic或其他。看看您正在做的事情,您似乎正在构建表单集之间的映射:
这是关于逻辑关系的原子性;我不确定是否有任何方法比按索引进行的dumb-as-a-rock字符串串联更快:
x = 'ABC'
y = '123'
new_list = [x[0] + y[0], x[1]+y[1], x[2]+y[2], x[0]+y[2], x[2]+y[0]]
输出:
['A1', 'B2', 'C3', 'A3', 'C1']
['A1', 'B2', 'C3', 'A3', 'C1']
哪两张名单?我看到一个。导致您的输出的逻辑是什么???这个解释不足以确定解决方案:为什么以及如何省略“B2”?谢谢您的回答。但是,这是手动的,如果字符串更改,则必须对其进行编辑。
x = 'ABC'
y = '123'
new_list = [x[0] + y[0], x[1]+y[1], x[2]+y[2], x[0]+y[2], x[2]+y[0]]
['A1', 'B2', 'C3', 'A3', 'C1']