簡體   English   中英

創建一個列表,其中每個 list[j] 是另一個字符串列表中每個元素的字符 j

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM