2016-12-05 22 views
-1

特定の順序で文字列の文字を入れて:例えば、どのように私はこのように、位置</em>の<em>リストを持っている

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

は私も文字列を持って、この1:

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()sの要素のタプルを形成するようにしてa

filter()が文字をソートするために2

sorted()ライン1とラインの文字を分離するために各行の

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あるリストの文字列行が削除された後、各グループの各文字がjoinになり、グループはjoinとなります。

出力します

WOEL 
HLLOR 

を二Eがに姿を消したところ、私は知りません。

0

リストコンプライアンスとジップ関数の2つのオプションを使用するオプションもあります。

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

結果でWICH結果=「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 

私はあなたを助けてくれることを願っています。

関連する問題