Найти индекс предмета в группе из 4 списков - PullRequest
0 голосов
/ 21 января 2020

Ниже приведена функция в python для поиска индекса входа в группе из 4 *.

def mapping(inp_rate=[],inp_rssi=[]):
    a1=[6.5,13.0,19.5,26.0,39.0,52.0,58.5,65.0]`
    a11=[7.2,14.4,21.7,28.9,43.3,57.8,65.0,72.2]
    a2=[13.0,26.0,39.0,52.0,78.0,104.0,117.0,130.0]
    a22=[14.4,28.9,43.3,57.8,86.7,115.6,130,144.4]
    result_list = []
    print inp_rate
    for value in inp_rate:
        if value in a1:
            result_list.append(a1.index(value))
        elif value in a11:
            result_list.append(a11.index(value))
        elif value in a2:
            result_list.append(a2.index(value))
        elif value in a22:
            result_list.append(a22.index(value))
        else:
            result_list.append(0)
        print(result_list)

вывод выглядит следующим образом:

['65.0', '144.4', '72.2', '72.2']
[0, 0, 0, 0]

Поскольку элементы списка присутствует в a1, a11, a2, a22, не могу понять, почему индекс 0!

Ответы [ 5 ]

0 голосов
/ 21 января 2020

нужно поставить списки следующим образом и все заработало.

a1=['6.5','13.0','19.5','26.0','39.0','52.0','58.5','65.0']
a11=['7.2','14.4','21.7','28.9','43.3','57.8','65.0','72.2']
a2=['13.0','26.0','39.0','52.0','78.0','104.0','117.0','130.0']
a22=['14.4','28.9','43.3','57.8','86.7','115.6','130.0','144.4']
0 голосов
/ 21 января 2020

Надеюсь, это поможет.

list1 = [ a1,a11,a2,a22]

for i in inp_rate:
    c = 0
    for j in list1:
        if i in j:
            c+=1
            print(j.index(i),i,j,c)
            if c == 1 :
                result_list.append(j.index(i)+1)

вывод:

result_list = [8, 8, 8, 5, 8, 8, 5, 2, 8, 6, 1]

0 голосов
/ 21 января 2020

Я не знаю, является ли это наиболее эффективным способом, но мой подход был бы следующим:

Сначала я бы поместил массивы в кортеж для возможности их перебора:

arr = (a1, a11, a2, a22)

Следующим шагом будет перебирать ваши входные данные и массивы, проверять, находится ли число в массиве, а затем добавлять индекс в список для выходных данных:

out = []
for i in inp_rate:
    for j in arr:
        if i in j:
            output.append(j.index(i))

И как Вы начинаете считать с 1, а не с 0, вам нужно добавить 1 в методе добавления.

0 голосов
/ 21 января 2020
x = a1 + a11 + a2 + a22
result = [x.index(i)%8+1 if i in x else -1 for i in inp_rate]
result
0 голосов
/ 21 января 2020

Вы сказали, что хотите индекс, но 65 имеет индекс 7 в списке a1. Если вы хотите фактическое место (где первый элемент списка равен 1, а не 0), просто добавьте его к значению, добавляемому в список.

Кроме того, я добавил оператор печати, когда значение отсутствует ни в одном списке, как упомянул @Chris.

a1 = [6.5, 13, 19.5, 26, 39, 52, 58.5, 65]
a11 = [7.2, 14.4, 21.7, 28.9, 43.3, 57.8, 65, 72.2]
a2 = [13, 26, 39, 52, 78, 104, 117, 130]
a22 = [14.4, 28.9, 43.3, 57.8, 86.7, 115.6, 130, 144.4]

inp_rate = [65, 72.2, 72.2, 39, 72.2, 144.4, 78, 13, 72.2, 104, 6.5]

result_list = []

for value in inp_rate:
    if value in a1:
        result_list.append(a1.index(value))
    elif value in a11:
        result_list.append(a11.index(value))
    elif value in a2:
        result_list.append(a2.index(value))
    elif value in a22:
        result_list.append(a22.index(value))
    else:
        print("{} cannot be found".format(value))

print(result_list)

Это печатает

[7, 7, 7, 4, 7, 7, 4, 1, 7, 5, 0]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...