如何比较两个列表中每个值的索引python

时间:2019-03-07 15:47:41

标签: python arrays python-3.x nested-lists

我有6个文件的列表和6个mac地址的列表。每个mac地址对应于同一列表插槽中的文件。例如,mac_list[1]对应于file_list[1]mac_list[2]对应于file_list[2],依此类推。每个文件已经包含一个不正确的mac地址,因此我需要覆盖不正确的mac地址。与来自mac_list中相应索引的新索引(来自mac_list)。我知道如何用sed实际替换每个mac地址。我不知道该怎么做,只能访问两个列表中相同索引处的值。我最初的想法是对两个列表使用嵌套的for循环并比较它们的索引:

for addr in mac_list:
  for file in file_list:
     if addr.index == file.index:
        #overwrite mac address

但是有没有更有效的方法呢?

5 个答案:

答案 0 :(得分:1)

zip是最简单的方法:

mac_list = [1, 2, 3] # for example
file_list = [4, 5, 6]

for item1, item2 in zip(mac_list, file_list):
    print(item1, item2)
    #overwrite mac address

# prints:
# 1 4
# 2 5
# 3 6

答案 1 :(得分:0)

您需要使用zip

for addr, file in zip(mac_list, file_list):
    # to-do

您可以选择但不是优选使用公共索引计数器:

# if the lists have the same length
for i in range(len(mac_list)):
    addr, file = mac_list[i], file_list[i]
    # to-do

# if you're not sure that they have the same length
l = min(len(mac_list), len(file_list))
for i in range(l): # if the lists have the same length
    addr, file = mac_list[i], file_list[i]
    # to-do

答案 2 :(得分:0)

>>> file_list=[1,2,3]
>>> mac_list=['x','y','z']
>>> zip(file_list,mac_list)
<zip object at 0x10a2c1388>
>>> list(zip(file_list,mac_list))
[(1, 'x'), (2, 'y'), (3, 'z')]
>>> dict(zip(file_list,mac_list))
{1: 'x', 2: 'y', 3: 'z'}

答案 3 :(得分:0)

我不知道您如何生成2个列表,但是生成字典会更加高效,然后您可以进行O(1)查找,而无需进行迭代。

如果您坚持要列出2个列表,则:

for index, file in enumerate(file_list):
    relevant_mac = mac_list[index]

或其他答案中建议的zip

答案 4 :(得分:0)

通常,除非真正实现复杂的算法,否则通常不需要在Python中使用index数组。 但是为了完整起见,这是使用索引解决的方法:

for idx, addr in enumerate(mac_list):
   file = file_list[idx]
   #...

正如其他答案所提到的,zip是实现此目的的Python方法。