簡體   English   中英

如何通過使用 for 循環添加現有列表來創建新列表

[英]How to create new list by adding existing lists using for loop

我想將一個嵌套列表中的單詞與中間的單詞“and”連接起來。 例如:

l1 = [帕特里克、彼得、傑羅姆]、[麗莎、凱倫、愛麗絲]

l2 應該是:[Patrick 和 Lisa,Peter 和 Karen,Jerome 和 Alice]

無論嵌套列表中是否有 2,3 或任何數量的列表,代碼都不應該有所不同。

我嘗試迭代變量中的列表范圍,然后將結果 append 迭代到一個新變量。 但是,結果只是第一個組合,或者結果在第二個組合之后結束。

def names(one):
    newlist = []
    x = 0
    for y in range(len(one)):
        newlist.append(one[x][y] + " and " + one[x+1][y])
        x += 1
        return newlist

['帕特里克和麗莎']

是我到現在為止的。 我知道這與迭代有關,但由於我對 python 很陌生,所以我被卡住了。

似乎l1是兩個元素的元組。 使用以下內容:

l2 = []

for name_a, name_b in zip(l1[0], l1[1]):
    l2.append(name_a + ' and ' + name_b)

如果您使用的是 Python 3.6+,您可以使用 f 字符串:

l2 = []

for name_a, name_b in zip(l1[0], l1[1]):
    l2.append(f'{name_a} and {name_b}')

另請記住,您也可以使用列表理解。

Python 3.6+

l2 = [f'{name_a} and {name_b}' for name_a, name_b in zip(l1[0], l1[1])]
l2 = [name_a + ' and ' + name_b for name_a, name_b in zip(l1[0], l1[1])]

注意:如果不允許使用zip ,請使用range並使用索引符號,如下所示:

l2 = []

for i in range(len(l1[0])):
    name_a = l1[0][i]
    name_b = l1[1][i]
    l2.append(name_a + ' and ' + name_b)

更新:根據之前的評論,您應該使用以下內容:

l2 = []

for i in range(len(l1[0])):
    l2.append(' and '.join(e[i] for e in l1))

您可以使用zip從子列表中獲取名稱的組合,並且列表中“and”重復了第一個列表中存在元素的次數one[0]

one = [['Patrick', 'Peter', 'Jerome'], ['Lisa', 'Karen', 'Alice']]
name_tup = zip(one[0], ["and"] * len(one[0]), one[1])

然后使用列表推導從zip返回的元組生成輸出列表。 使用 unpacking 三個元素通過使用join function 之間的空格連接:

list = [ " ".join([x, y, z]) for x, y, z in name_tup]

>>> list
['Patrick and Lisa', 'Peter and Karen', 'Jerome and Alice']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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