циклический просмотр элементов списка в Python - PullRequest
0 голосов
/ 08 марта 2020

Простая проблема, я пытаюсь l oop через каждый элемент этого списка, сам список формируется как список списков ..

Price = [500, 300, 100, 200]
list_of_pairs = [[1, 1], [2, 2], [1, 1], [2, 2]]

p_11 = []
p_22 = []
p_33 = []

for i in list_of_pairs:
    if i[0] == 1 and i[1] == 1:
        p_11.append(Price[list_of_pairs.index(i)])

    elif i[0] == 2 and i[1] == 2:
        p_22.append(Price[list_of_pairs.index(i)])

    elif i[0] == 3 and i[1] == 3:
        p_33.append(Price[list_of_pairs.index(i)])


print(list_of_pairs)

print(p_11)
print(p_22)

Проблема в том, когда я l oop через список и попытаться классифицировать каждый элемент (подсписок) по его первому и второму значению, это выглядит так:

#the output:
[[1, 1], [2, 2], [1, 1], [2, 2]]
[500, 500]
[300, 300]

#what I expected(wanted) for the output:
[[1, 1], [2, 2], [1, 1], [2, 2]]
[500, 100]
[300, 200]

Ответы [ 3 ]

2 голосов
/ 08 марта 2020

Вы можете использовать enumerate вместо list_of_pairs.index, чтобы получить индекс текущего элемента:

for j, i in enumerate(list_of_pairs):
    if i[0] == 1 and i[1] == 1:
        p_11.append(Price[j])

    elif i[0] == 2 and i[1] == 2:
        p_22.append(Price[j])

    elif i[0] == 3 and i[1] == 3:
        p_33.append(Price[j])

Это, однако, не очень хорошее решение, возможно, лучший способ сделать то же самое может быть так:

price = [500, 300, 100, 200]
list_of_pairs = [(1, 1), (2, 2), (1, 1), (2, 2)]

# Dictionary that stores the prices for all pairs
p = {}

# Iterate over all prices and pairs at the same time
for price, pair in zip(price, list_of_pairs):
    if pair not in p:
        p[pair] = [price]
    else:
        p[pair].append(price)

print(p[(1,1)]) # [500, 100]
print(p[(2,2)]) # [300, 200]
1 голос
/ 08 марта 2020

Попробуйте использовать enumerate, чтобы получить индекс напрямую, это проще и быстрее:

Price = [500, 300, 100, 200]
list_of_pairs = [[1, 1], [2, 2], [1, 1], [2, 2]]

p_11 = []
p_22 = []
p_33 = []

for index,i in enumerate(list_of_pairs):
    if i[0] == 1 and i[1] == 1:
        p_11.append(Price[index])

    elif i[0] == 2 and i[1] == 2:
        p_22.append(Price[index])

    elif i[0] == 3 and i[1] == 3:
        p_33.append(Price[index])


print(list_of_pairs)

print(p_11)
print(p_22)
0 голосов
/ 08 марта 2020

Поскольку index возвращает индекс первого значения в list, которое соответствует этому, поскольку у вас есть дубликаты, вы получаете неправильные значения, используйте enumerate, чтобы получить индекс:

Price = [500, 300, 100, 200]
list_of_pairs = [[1, 1], [2, 2], [1, 1], [2, 2]]

p_11 = []
p_22 = []
p_33 = []

for i, (a,b) in enumerate(list_of_pairs):
    if a == 1 and b == 1:
        p_11.append(Price[i])

    elif a == 2 and b == 2:
        p_22.append(Price[i])

    elif a == 3 and b == 3:
        p_33.append(Price[i])


print(list_of_pairs)
>>> [[1, 1], [2, 2], [1, 1], [2, 2]]

print(p_11)
>>> [500, 100]

print(p_22)
>>> [300, 200]

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