Как сравнить индекс каждого значения в двух списках python - PullRequest
0 голосов
/ 07 марта 2019

У меня есть список из 6 файлов и список из 6 MAC-адресов.Каждый mac-адрес соответствует файлу в одном и том же списке.Например, mac_list[1] соответствует file_list[1], mac_list[2] соответствует file_list[2] и т. Д. Каждый файл уже содержит неправильный MAC-адрес, поэтому мне нужно перезаписать неправильный адрес новым (из * 1005).*) который существует по соответствующему индексу в mac_list.Фактическая замена каждого mac-адреса, который я знаю, как делать с sed.То, что я не знаю, как сделать, это получить доступ только к значениям, которые существуют в том же индексе в обоих списках.Сначала я хотел использовать вложенный цикл for для обоих списков и сравнить их индексы:

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

Но есть ли более эффективный подход к этому?

Ответы [ 5 ]

1 голос
/ 07 марта 2019

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
0 голосов
/ 07 марта 2019

Как правило, вам обычно не нужно использовать index массивов в Python, если вы действительно не реализуете сложные алгоритмы. но для полноты вот как вы решите это, используя индексы:

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

как упоминают другие ответы, zip - это питонский способ сделать это.

0 голосов
/ 07 марта 2019

Я не знаю, как вы генерируете 2 списка, но будет гораздо эффективнее сгенерировать dict, тогда вы можете выполнить поиск O (1) без необходимости повторения.

Если вы настаиваете на 2 списках, то:

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

или zip, как было предложено в других ответах.

0 голосов
/ 07 марта 2019
>>> 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'}
0 голосов
/ 07 марта 2019

Вам необходимо использовать 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
...