Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从字符串创建特定列表_Python_String_Loops - Fatal编程技术网

Python 从字符串创建特定列表

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

根据评论编辑:

我想使用字符串“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)
输出

第一个解决方案假设您只需要重复一次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']