如何按特定顺序放置字符串的字符

时间:2016-12-05 17:10:06

标签: python string list

我有职位列表,如下所示:

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"

我该怎么做?

4 个答案:

答案 0 :(得分: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'

答案 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

我希望它可以帮到你。