簡體   English   中英

從字符串創建特定列表

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

第二種解決方案的想法是使用一可見元素,並且僅在看不見的情況下才添加到最終結果中。 最后,您可以組合解決方案並使用cycleOrderedDict

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']

我嘗試了幾件事,但是我想知道是否還有一種更Python的方法來完成此任務。

不說您嘗試過的方法,很難建議使用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']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM