2016-12-05 58 views
-1

我有位置的列表,像這樣:如何把一個字符串的字符以特定的順序

a=[[1,0],[0, 2],[0, 4],[1,1],[0, 1],[0, 0],[1,3],[1,4],[1,2]] 

我也有一個,比如這一個:

string = "HELLOWORL" 

而且我想把這個字符串的每個字符以位置列表列表的順序 放在一個矩陣中(其中position [0]是行和pos ition [1]是列),如下所示:

"string= WOELE 
     HLLOR" 

我該如何做?

+0

您的職位列表是錯誤的方式,通常點首先x座標。 – theonlygusti

+0

我在'a = [[1,0],[0,2],...'' - '上得到一個錯誤,列表索引必須是整數,而不是元組「 – theonlygusti

+1

這不是一個代碼寫入服務。你到目前爲止嘗試了什麼?發佈您的代碼!當你運行它時發生了什麼?你預期會發生什麼?你有什麼特別的問題? https://stackoverflow.com/help/mcve – Robert

回答

1

可以使用這些函數來實現的是:

zip()以形成元素的元組在sa

filter()分開線1和線的字符2

sorted()的字符進行排序每行

a = [[1, 0], [0, 2], [0, 4], [1, 1], [0, 1], [0, 0], [1, 3], [1, 4], [1, 2]] 
s = "HELLOWORL" 

first_line = sorted(filter(lambda i: i[0][0] == 0, zip(a, s)), key=lambda i: i[0][1]) 
second_line = sorted(filter(lambda i: i[0][0] == 1, zip(a, s)), key=lambda i: i[0][1]) 

word1 = ''.join(item[1] for item in first_line) 
word2 = ''.join(item[1] for item in second_line) 

輸出:

>>> word1 
'WOEL' 
>>> word2 
'HLLOR' 
0

它也可以做這樣的:

string = "HELLOWORL" 

a = [[1,0],[0, 2],[0, 4],[1,1],[0, 1],[0, 0],[1,3],[1,4],[1,2]] 

def value(v): return v[1] 

import itertools 
s = sorted(zip(string, a), key=value) 
s = ((l, r) for (l, (r, c)) in s) 
s = itertools.groupby(s, key=value) 
print '\n'.join(''.join(c for (c, r) in g[1]) for g in s) 

zip s的列表中的字符串,然後sorted通過列表元素則列被刪除,項目是groupby ed他們的行和每個組中的每個字母是join刪除他們的行後,然後組爲join作爲線。

它打印:

WOEL 
HLLOR 

我不知道在哪裏第二E消失了。

0

還有使用一對列表comprenhension和zip功能的選項。

a=[[1,0],[0, 2],[0, 4],[1,1],[0, 1],[0, 0],[1,3],[1,4],[1,2]] 
string = "HELLOWORL" 
# zip(*a) extracts the first and the last element of each elemnt of a 
# in a different list 
rows, cols = zip(*a) 
# Find the maximum possible value and sum 1in order to use then xrange 
maxrow=max(rows) + 1 
maxcol=max(cols) + 1 
# Create an empty list with placeholders fot he characteres 
b=[["" for _ in xrange(maxcol)] for _ in xrange(maxrow)] 
for i in xrange(len(string)): 
    letter=string[i] 
    row,col = a[i] 
    # Change the placeholder for the correct character 
    b[row][col]=letter 
# Paste everything pith join 
result = "\n".join(["".join(i) for i in b]) 

至極導致的結果=「WOEL \ nHLLOR」

0

這裏是另一種方式比我coleages前幾次那麼優雅,更「羅嗦」,但也許更多的入店你(你說你是python的新手)。

a=[[1,0],[0, 2],[0, 4],[1,1],[0, 1],[0, 0],[1,3],[1,4],[1,2]] 
string = "HELLOWORL" 

lista = [[a[i], string[i]] for i in range(0, len(string))] 
lista.sort() 

coordinate_x = lista[0][0][0] 
string = "" 
for x in lista: 
    if (x[0][0] == coordinate_x): 
     string = string + x[1] 
    else: 
     print string 
     string = x[1] 
     coordinate_x = x[0][0] 
print string 

我希望它可以幫助你。

相關問題