Как одновременно редактировать значения в списке? - PullRequest
0 голосов
/ 09 июля 2020

Пользователь вводит 2 разных целых числа, затем программа ищет числа в списке и заменяет первое число вторым числом, отображает новый список, и этот процесс продолжается.

Пояснение:

[0,1,2,3,4,5,6,7,8,9]

1-й вход -> 2
2-й вход -> 3

новый список [0,1,3,3,4,5,6,7,8,9]

1-й вход -> 3
2-й ввод -> 4

новый список2 [0,1,4,4,4,5,6,7,8,9]

Вот мой подход:

b=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

while True:
    print(b)
    a1 = int(input("Enter a nmuber:"))
    a2 = int(input("Enter a number:"))
    for i in b:
        if i == (a1):
            b[i] = a2
    print(b)

Это успешно изменяет 1-е значения, но когда я пытаюсь ввести 3 и 4, программа изменяет только одну из 3 в списке, ниже - результат, вход 1-й итерации-> 2 и 3, 2-й вход-> 3 и 4

выход:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Enter a nmuber:2
Enter a number:3
[0, 1, 3, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 3, 3, 4, 5, 6, 7, 8, 9]
Enter a nmuber:3
Enter a number:4
[0, 1, 3, 4, 4, 5, 6, 7, 8, 9]
[0, 1, 3, 4, 4, 5, 6, 7, 8, 9]
Enter a nmuber:

Почему программа не меняет значения в соответствии с моими потребностями во второй (и предстоящей) итерации?

Ответы [ 5 ]

3 голосов
/ 09 июля 2020

Ваш подход хорош, но, приятель, он неверен. Можно просто использовать функцию enumerate (). Это будет так:

while True:
   
    
    print(b)
    a1=int(input("Enter a nmuber:"))
    a2=int(input("Enter a number:"))
    for i, j in enumerate(b):
        if j==(a1):
            b[i]=a2
    print(b)
3 голосов
/ 09 июля 2020

Когда вы говорите for i in b:, i принимает последовательные значения списка b, а не индексы . Когда вы находите значение i, равное input a, вы говорите:

b[i]=a2

Но теперь вы используете i, как если бы это был индекс значение вы хотите изменить, но это не так. Что вы хотите сделать, так это использовать enumerate для одновременного перечисления индексов и значений b:

b=[0,1,2,3,4,5,6,7,8,9]
while True:  
    print(b)
    a1=int(input("Enter a nmuber:"))
    a2=int(input("Enter a number:"))
    for index, value in enumerate(b):
        if value == a1:
            b[index] = a2
    print(b)

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

    a1=int(input("Enter a nmuber:"))
    if a1 == -1:
        break
1 голос
/ 10 июля 2020

Думаю, мы можем воспользоваться преимуществами in и index(), чтобы решить эту проблему:

b = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

while True:
    print(b)

    a1 = int(input("Enter a number: "))

    if a1 == -1:
        break  # +1 to @Booboo

    a2 = int(input("Enter a number: "))

    while a1 in b:
        b[b.index(a1)] = a2

ИСПОЛЬЗОВАНИЕ

% python3 test.py
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Enter a number: 2
Enter a number: 3
[0, 1, 3, 3, 4, 5, 6, 7, 8, 9]
Enter a number: 3
Enter a number: 4
[0, 1, 4, 4, 4, 5, 6, 7, 8, 9]
Enter a number: -1
% 

Хотя это действительно по списку проходит больше, чем необходимо. Подход enumeration @TanayMishra - хорошее однопроходное решение (+1).

1 голос
/ 09 июля 2020

Вот go:

b = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
while True:
    a1 = int(input("Enter a nmuber:"))
    a2 = int(input("Enter a number:"))
    for i in range(len(b)):
        if b[i] == a1:
            b[i] = a2
    print(b)
0 голосов
/ 10 июля 2020

Я думаю, мы можем использовать преимущества списков и фильтров, чтобы решить эту проблему:

b = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
while True:  # +1 to @cdlane
    print(b)
    a1 = int(input("Enter a nmuber:"))
    a2 = int(input("Enter a number:"))
    b = [i if i!=a1 else a2 for i in b]
    print(b)

Тестовый прогон:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Enter a number: 2
Enter a number: 3
[0, 1, 3, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 3, 3, 4, 5, 6, 7, 8, 9]
Enter a number: 3
Enter a number: 4
[0, 1, 4, 4, 4, 5, 6, 7, 8, 9]
[0, 1, 4, 4, 4, 5, 6, 7, 8, 9]
Enter a number: 

Хотя это действительно дает 900 % проходит через список больше, чем необходимо.
Подход @TanayMishra к перечислению - хорошее однопроходное решение (+1).

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