簡體   English   中英

嵌套在帶有列表的python中的for循環

[英]nested for loops in python with lists

鄉親-我有兩個清單

list1=['a','b']
list2=['y','z']

我想將變量發送到如下函數:

 associate_address(list1[0],list2[0])
 associate_address(list1[1],list2[1])

我的腳本:

for l in list1:
 for i in list2:
  conn.associate_address(i,l)

我收到以下輸出:

conn.associate_address(a,y)
conn.associate_address(a,z)

我希望它看起來像這樣:

conn.associate_address(a,y)
conn.associate_address(b,z)

使用zip函數,如下所示:

list1=['a','b']
list2=['y','z']
for i, j in zip(list1, list2):
    print(i, j)

輸出:

('a', 'y')
('b', 'z')

你為什么這么認為呢?

>>> for x in [1,2]:
...     for y in ['a','b']:
...             print x,y
... 
1 a
1 b
2 a
2 b

嵌套循環將針對其父循環中的每個迭代執行。 考慮一下真值表:

p q
0 0
0 1
1 0
1 1

或組合:

Choose an element from a set of two elements.
2 C 1 = 2

Choose one element from each set, where each set contains two elements.
(2 C 1) * (2 C 1) = 4

假設您有10個元素的列表。 使用for循環對其進行迭代將需要10次迭代。 如果您還有5個元素的列表,則使用for循環對其進行迭代將需要5次迭代。 現在,如果嵌套這兩個循環,則必須執行50次迭代以覆蓋每個列表中元素的每種可能組合。

您有很多解決方案。

# use tuples to describe your pairs
lst = [('a','y'), ('b','z')]
for pair in lst:
    conn.associate_address(pair[0], pair[1])

# use a dictionary to create a key-value relationship
dct = {'a':'y', 'b':'z'}
for key in dct:
    conn.associate_address(key, dct[key])

# use zip to combine pairwise elements in your lists
lst1, lst2 = ['a', 'b'], ['y', 'z']
for p, q in zip(lst1, lst2):
    conn.associate_address(p, q)

# use an index instead, and sub-index your lists
lst1, lst2 = ['a', 'b'], ['y', 'z']
for i in range(len(lst1)):
    conn.associate_address(lst1[i], lst2[i])

我建議使用dict而不是2個列表,因為您顯然希望將它們關聯。

字典在這里解釋

字典設置好后,您就可以說

>>>mylist['a']
y
>>>mylist['b']
z

暫無
暫無

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

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