创建一个列表,其中每个列表[j]是另一个字符串列表中每个元素的字符j

2024-10-16 20:53:16 发布

您现在位置:Python中文网/ 问答频道 /正文

例如:

list1 = ['abc','def','ghi','jk'`] 
output is : list2 = ['adgj','behk','cfi']

基本上,list2中的每个元素i应该是list1中每个元素的第i个字符

我知道一般的格式应该是创建list2时使用下面的元素,直到每个元素的末尾

[list1[0][0]
[list1[0][1]
[list1[0][2]

但是,当我尝试创建for循环时,它会说我的索引不足,而且如果list1中的最后一个元素的大小小于其余元素的大小,我也很难让索引停止。我只是需要一些关于如何设置for循环的指导

for I in range(Len(list1)):
  list2[I]=list1[I][0]

我知道我需要第二个for循环来更改索引0,但在实现时遇到了问题


Tags: 元素foroutputisdef格式abcjk
2条回答

您可以使用itertools.zip_longest@juanpa.arrivillaga在注释中所述:

list(map(''.join, zip_longest(*list1, fillvalue='')))

或手动:

result = [''] * max(map(len, list1))
for i in range(len(result)):
    for s in list1:
      if i  < len(s):  result[i] += s[i]

你可以这样做:

list1 = ['abc','def','ghi','jk']

max_length = max(map(len, list1))

result = []
for i in range(max_length):
    element = []
    for s in list1:
        element.append(s[i] if i < len(s) else "")
    result.append(''.join(element))

print(result)

外循环迭代所有可能的索引,内循环迭代单词,行:

s[i] if i < len(s) else ""

如果i在边界内,则检索s[i]。尽管最具Python性的方法是:

from itertools import zip_longest

list1 = ['abc', 'def', 'ghi', 'jk']

result = list(map(''.join, zip_longest(*list1, fillvalue='')))

print(result)

输出

['adgj', 'behk', 'cfi']

尽管如此,后者还是有点高级的解决方案

相关问题 更多 >