我有职位列表,如下所示:
a=[[1,0],[0, 2],[0, 4],[1,1],[0, 1],[0, 0],[1,3],[1,4],[1,2]]
我还有一个字符串,例如这个:
string = "HELLOWORL"
我想把字符串中的每个字符放在顺序中 位置列表,在矩阵中(其中position [0]是行,位置[1]是列),如下所示:
"string= WOELE
HLLOR"
我该怎么做?
答案 0 :(得分:1)
您可以使用这些功能来实现:
zip()
在s
和a
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'
答案 1 :(得分: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
是带有列表的字符串,然后列表元素为sorted
,然后删除列,并且项目为groupby
行和每个字母在删除行后,每个组中都会join
,然后这些组被join
作为行。
打印:
WOEL
HLLOR
我不知道第二个E
消失在哪里。
答案 2 :(得分:0)
还可以选择使用一些list 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])
结果是&#34; WOEL \ nHLLOR&#34;
答案 3 :(得分: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
我希望它可以帮到你。