0 / 0 / 0
Регистрация: 15.10.2016
Сообщений: 4
1

Списки, списки, списки. не все так просто

18.10.2016, 11:48. Показов 2161. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Написать функцию, которая принимает 2 списка, содержащие одинаковое число строк, затем изменяет списки сопоставляя строки, занимающие одинаковые позиции, и удаляет из списка наибольшую из двух, если строки равны, удаляет обе.

Например, даны два списка:
Python
1
2
la = ['bear', 'tiger', 'wolf', 'whale', 'elephant']
lb = ['swan', 'cat', 'dog', 'duck', 'rabbit']
функция modi(la, lb) должна выдать те же самые строки, но изменив их на:
['bear','elephant']
['cat','dog','duck']

Вот, что я написала:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
def confront(s1, s2):   # сравнивает строки
    if s1 < s2:
        return 0
    elif s2 < s1:
        return 1
    else:
        return 2
 
 
def modi(la,lb):
    latemp = []
    lbtemp = []
    i = 0
    while i < len(la):
        
 
        q = confront(la[i], lb[i])
        if q == 0:
            latemp.append(la[i])
                
        elif q == 1:
            lbtemp.append(lb[i])
              
                
        i +=1  
            
    la = latemp
    lb = lbtemp
    return la, lb
Но я не изменяю списки la и lb, а создаю пустые, заполняю их нужными элементами и переназначаю в конце la и lb.
Есть идеи, как можно именно изменять входящие списки и получить нужный результат?

!! когда я пробовала remove() - получался бред, т.к. элементы смещались
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.10.2016, 11:48
Ответы с готовыми решениями:

Создай рекурсивную функцию, которая превращает вложенные списки в линейные списки без вложений
Бывает, что в задачах приходится хранить списки внутри списков с данными. Такие списки называются...

Как преобразовать вложенные списки из строки в обычные списки?
Доброе утро, форумчане. Подскажите пожалуйста, мне нужно написать скрипт, который разбирает...

Даны списки чисел, нужно вывести список всех возможных комбинаций чисел, составляющих эти списки
Даны списки чисел, нужно вывести список всех возможных комбинаций чисел, составляющих эти списки...

Список женихов и невест. Обьеденить списки в списки пар.
Имеется список женихов и невест. каждая запись списка содержит пол, имя, возраст, рост, вес, а...

Дан вектор, элементы которого списки из целых чисел.Заменить на NILL списки с суммой равной 0
Дан вектор, элементы которого списки из целых чисел.Заменить на NILL списки с суммой равной 0.

4
охотник
1011 / 535 / 650
Регистрация: 29.09.2014
Сообщений: 1,083
18.10.2016, 14:28 2
Лучший ответ Сообщение было отмечено natasha_la как решение

Решение

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def modi(x,y):
    for i in range(len(x)-1,-1,-1):
        if x[i]==y[i]:
            del x[i]
            del y[i]
        elif x[i]>y[i]:
            del x[i]
        else:
            del y[i]
        i-=1    
    return x,y
la = ['bear', 'tiger', 'wolf', 'whale', 'elephant']
lb = ['swan', 'cat', 'dog', 'duck', 'rabbit']
modi(la,lb)
print('la: {}\nlb: {}'.format(la,lb))
1
0 / 0 / 0
Регистрация: 15.10.2016
Сообщений: 4
18.10.2016, 17:10  [ТС] 3
это просто гениально - перебирать эти списки с конца!
0
Эксперт Python
5434 / 3857 / 1215
Регистрация: 28.10.2013
Сообщений: 9,553
Записей в блоге: 1
19.10.2016, 17:11 4
...удаляет из списка наибольшую из двух, если строки равны, удаляет обе.
Python
1
2
3
4
5
6
7
8
9
10
11
for lv_a,lv_b in zip(la.copy(),lb.copy()):
    if len(lv_a)>len(lv_b):
        la.remove(lv_a)
    elif len(lv_b)>len(lv_a):
        lb.remove(lv_b)
    else:
        la.remove(lv_a)
        lb.remove(lv_b)
 
print(la)   #[]
print(lb)   #['cat', 'dog', 'duck', 'rabbit']
1
12 / 12 / 10
Регистрация: 17.06.2016
Сообщений: 70
23.10.2016, 21:55 5
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
zv1 = ['bear', 'tiger', 'wolf', 'whale', 'elephant']
zv2 = ['swan', 'cat', 'dogs', 'duck', 'rabbit']
for i in range(len(zv1)-1,-1,-1):
    if len(zv1[i])==len(zv2[i]):
               del zv1[i] 
               del zv2[i]
 
    elif len(zv1[i])>len(zv2[i]):
               del zv1[i]
    else:
               del zv2[i]
    
print(zv1)
print(zv2)
1
23.10.2016, 21:55
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.10.2016, 21:55
Помогаю со студенческими работами здесь

Списки, как склеить списки между собой?
Ребят, привет всем, есть код, в классе которого описаны несколько методов: добавление элемента в...

Списки. Выведите списки всех групп построчно
Пусть журнал по предмету «Информационные технологии» представлен в виде списка: my_len = ],],]]....

Зависимые списки, снова списки и проблема
&lt;div class=&quot;t-product__option js-product-option newselect&quot;&gt; &lt;div class=&quot;t-product__option-title...

Связанный списки (динамические списки)
Подскажите, вот есть программа из книги, кто то ее уже выкладывал на форуме -...

Ассоциативные списки и списки свойств
задача:Исходный список содержит имена обьектов ,списки свойств которых содержат некоторую...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru