2016-12-05 38 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 

我希望它可以帮助你。

相关问题