[英]Creating a list where each list[j] is the character j from each element in another list of strings
例如:
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 中的最后一個元素的大小小於元素的 rest,我也在努力讓索引停止。 我只需要一些關於如何設置 for 循環的指導嗎?
for I in range(Len(list1)):
list2[I]=list1[I][0]
我知道我需要第二個 for 循環來更改索引 0,但無法實現
你可以這樣做:
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]
。 雖然最pythonic (如@juanpa.arrivillaga 提到的)方式是這樣做:
from itertools import zip_longest
list1 = ['abc', 'def', 'ghi', 'jk']
result = list(map(''.join, zip_longest(*list1, fillvalue='')))
print(result)
Output
['adgj', 'behk', 'cfi']
盡管后者是一個有點先進的解決方案。
您可以使用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]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.