Форум программистов, компьютерный форум CyberForum.ru

Python: научные вычисления

Войти
Регистрация
Восстановить пароль
 
natasha_la
0 / 0 / 0
Регистрация: 15.10.2016
Сообщений: 4
#1

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

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

Написать функцию, которая принимает 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() - получался бред, т.к. элементы смещались
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.10.2016, 11:48     Списки, списки, списки. не все так просто
Посмотрите здесь:

Линейные списки и циклические списки Pascal
Список женихов и невест. Обьеденить списки в списки пар. C++ Builder
Что не так с кодом? Компилируется, но не работает (связные списки) C++
Как преобразовать вложенные списки из строки в обычные списки? Python
Lisp Дан вектор, элементы которого списки из целых чисел.Заменить на NILL списки с суммой равной 0
Delphi Задача на списки.Не могу понять,что делаю не так
Списки, как склеить списки между собой? C++
Python Даны списки чисел, нужно вывести список всех возможных комбинаций чисел, составляющих эти списки
Lisp Ассоциативные списки и списки свойств
Lisp Ассоциативные списки и списки свойств

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vint-81
охотник
1005 / 529 / 355
Регистрация: 29.09.2014
Сообщений: 1,083
18.10.2016, 14:28     Списки, списки, списки. не все так просто #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
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))
natasha_la
0 / 0 / 0
Регистрация: 15.10.2016
Сообщений: 4
18.10.2016, 17:10  [ТС]     Списки, списки, списки. не все так просто #3
это просто гениально - перебирать эти списки с конца!
Garry Galler
518 / 404 / 101
Регистрация: 28.10.2013
Сообщений: 889
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']
Tehnic
11 / 11 / 3
Регистрация: 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)
Yandex
Объявления
23.10.2016, 21:55     Списки, списки, списки. не все так просто
Ответ Создать тему
Опции темы

Текущее время: 13:06. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru