获取字符串列表中每个字符串的第n个字符

时间:2017-04-26 16:48:28

标签: python python-3.x

让我们得到列表['abc', 'def', 'gh']我需要获取一个字符串,其中包含第一个字符串的第一个字符的内容,第二个字符串的第一个字符串,依此类推。

所以结果看起来像这样:"adgbehcf"但问题是数组中的最后一个字符串可能有两个或一个char。

我已经尝试嵌套for循环但是没有用。

代码:

n = 3 # The encryption number    

for i in range(n):
    x = [s[i] for s in partiallyEncrypted]
    fullyEncrypted.append(x)

4 个答案:

答案 0 :(得分:2)

使用itertools.zip_longest的版本:

from itertools import zip_longest

lst = ['abc', 'def', 'gh']
strg = ''.join(''.join(item) for item in zip_longest(*lst, fillvalue=''))
print(strg)

了解为什么这有效可能有助于查看

for tpl in zip_longest(*lst, fillvalue=''):
    print(tpl)

答案 1 :(得分:0)

我想你可以使用:

from itertools import izip_longest
l = ['abc', 'def', 'gh']
print "".join(filter(None, [i for sub in izip_longest(*l) for i in sub]))
# adgbehcf

答案 2 :(得分:0)

请不要使用此:

''.join(''.join(y) for y in zip(*x)) + 
''.join(y[-1] for y in x if len(y) == max(len(j) for j in x))

答案 3 :(得分:0)

有:

l = ['abc', 'def', 'gh']

这样可行:

s = ''

In [18]: for j in range(0, len(max(l, key=len))):
    ...:     for elem in l:
    ...:         if len(elem) > j:
    ...:             s += elem[j]

In [28]: s
Out[28]: 'adgbehcf'