Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
 Аватар для rar
2 / 2 / 0
Регистрация: 04.02.2016
Сообщений: 458

Переместить в начало подсписка

02.08.2017, 01:07. Показов 1964. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет, очередной вопросец...
Есть лист с подсписками:
list=[[1,2,3],[4,5,6],[7,8,9]]

и одномерный список
list_find=[2, 6, 8]

Вопрос:

Как записать условие при котором при нахождении чисел из списка list_find в списке list , он бы перемещал каждое такое число в начала своего подсписка, то есть на выходе был бы такой список:
list_sort=[[2,1,3],[6,4,5],[8,7,9]]
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.08.2017, 01:07
Ответы с готовыми решениями:

Переместить курсор в начало файла
Есть такой код: chats = open('Dialogs_Chats/' + '28' + '.txt', "a+", encoding='utf-8') chats.seek(0) chats.write('lol') ...

Объединение списков со вставкой элементов одного в начало каждого подсписка другого
Имеются два списка: , , , , , ] и Как можно элементы из второго подставить в первый, чтобы они вставлялись на первое...

Как переместить курсор в начало поля LineEdit при использовании маски
Прошу помощи. Использую маску в поле LineEdit. При установке мышкой курсора в это поле, он устанавливается в конец маски. Как его...

13
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
02.08.2017, 01:54
Лучший ответ Сообщение было отмечено rar как решение

Решение

Python
1
2
3
4
5
6
list_ = [[1,2,3],[4,5,6],[7,8,9]]
list_find = [2, 6, 8]
 
print([sorted(l,key=list_find.__contains__,reverse=True) for l in list_])
 
>>[[2, 1, 3], [6, 4, 5], [8, 7, 9]]
Добавлено через 8 минут
Либо - без создания нового списка - inplace:
Python
1
2
3
4
for l in list_:
    l.sort(key=list_find.__contains__,reverse=True)
    
print(list_)
1
 Аватар для rar
2 / 2 / 0
Регистрация: 04.02.2016
Сообщений: 458
05.08.2017, 12:45  [ТС]
может вопрос и некорректный (это от незнания ) но ....возможно ли решить эту же задачу методом sort (sorted) ? чтобы элементы в list_find=[2, 6, 8] служили ключами и перемещались в начало списка?
0
 Аватар для rar
2 / 2 / 0
Регистрация: 04.02.2016
Сообщений: 458
07.08.2017, 14:25  [ТС]
Вообщем нужен какой то другой способ, данный код в программе работает хаотично перемешивая элементы... поэтому не подходит...

как вариант думаю может как то можно задать индекс [0] для перемещаемого элемента в списке list, находящимся в списке list_find
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
07.08.2017, 15:26
Цитата Сообщение от rar Посмотреть сообщение
данный код в программе работает хаотично перемешивая элементы.
Какой код? Лично у меня ничего хаотично не перемешивается. Все элементы сохраняют свои изначальный порядок, не считая смещения на один индекс из-за перестановки одного из (входящего в list_find) элементов на первое место. Если же вхождения нет - все элементы остаются на своих местах.

Добавлено через 2 минуты
Но поскольку у вы пользуетесь не настоящим python, вполне естественно, у вас все может работать не так как у остальных.
P.S. Про IronPython вам стоило написать с первого же поста.
Так как:
1) это не совсем python
2) максимум он близок версии 2.7 настоящего python, а с тех пор многое изменилось.
0
 Аватар для rar
2 / 2 / 0
Регистрация: 04.02.2016
Сообщений: 458
07.08.2017, 15:32  [ТС]
здесь вопрос не к коду, а к программе (я работаю не напрямую с PYTHON , а с программой, в которую он входит как дополнение (IRONPYTHON 2.7)) ,которая при перезапуске кода делает ошибки (код, приведенный здесь в ответах является частью большего кода, возможно дело в этом (но ошибки найти не могу))
если работать напрямую с PYTHON никаких проблем - все работает как надо.

Но в приложении не могу найти причину почему это не так, поэтому и прошу другой алгоритм, если возможно
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
07.08.2017, 15:35
Цитата Сообщение от rar Посмотреть сообщение
если работать напрямую с PYTHON никаких проблем
Так я вам и написал - у вас не настоящий python: у он не будет работать точно также как настоящий.
У IronPython и CPython разные внутренние реализации алгоритмов.
Поэтому вы даже не в той ветке пытаетесь найти ответы. Правда, ветки для IronPython и вовсе нет :-)
0
 Аватар для rar
2 / 2 / 0
Регистрация: 04.02.2016
Сообщений: 458
07.08.2017, 15:40  [ТС]
Ну не все так печально
многие коды с этого форума уже прошли на ура )
и вроде этот как то не сопротивлялся и ошибок не выдает ) если его не перезапускать многократно)
при первом запуске вродь все ок
но прост я использую скрипт многократно и поэтому немножечко печально, что подглючивает
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
07.08.2017, 15:49
Цитата Сообщение от rar Посмотреть сообщение
многие коды с этого форума уже прошли на ура
Только те, которые не выходят за пределы версии python 2.7, поскольку IronPython создавался на основе этой версии и с тех пор практически не обновлялся, а сам разработчик полностью отказался от дальнейшего развития проекта, передав исходники другим людям.
0
 Аватар для rar
2 / 2 / 0
Регистрация: 04.02.2016
Сообщений: 458
08.08.2017, 09:29  [ТС]
Вон оно как...понятно, буду знать

пробую конечно писать код с другим решением ,пока не выходит...

буду ждать, кто чего подскажет, посоветует с другим вариантом кода ....

Добавлено через 17 часов 35 минут
вот что получилось , подскажите как упростить , оптимизировать код:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
#Условие: если элементв в подсписке "a" равен элементу в списке "b", то переместить его вверх подсписка, иначе подсписок оставляем без изменений
a=[[1,2,3],[4,5,6]]
b=[9,5]
 
ls=[]
 
for i,k in zip(a,b):
    first=[x for x in i if x==k]  #общие элементы в "a" и "b"
    another=[i.remove(x) for x in i if x==k]  #"a" и "b" без общих элементов 
    first.extend(i) #к списку общих элементов добавляем не общие
    ls.append(first)
   
print(ls)
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
08.08.2017, 14:45
Проще уже вряд ли: без использования sort любое решение - костыль в той или иной степени.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
list_ = [[1,2,3],[4,5,6],[7,8,9]]
list_find = [2, 6, 8]
 
for sublist in list_:
    for i in sublist:
        if i in list_find:  # проверка на вхождение
            sublist.remove(i)
            sublist.insert(0,i)
 
print(list_)            
 
list_ = [[1,2,3],[4,5,6],[7,8,9]]
list_find = [2, 6, 8]
 
for sublist in list_:
    inter = list(set(sublist) & set(list_find)) # общие элементы
    if inter:
        for i in inter:
            sublist.remove(i)
            sublist.insert(0,i)
 
print(list_)
Python
1
2
3
4
5
6
7
8
9
list_ = [[1,2,3],[4,5,6],[7,8,9]]
list_find = [2, 6, 8]
 
for sublist in list_:
    for i in sublist:
        if i in list_find:
            sublist.insert(0,sublist.pop(sublist.index(i)))
 
print(list_)
P.S. Да, в общем-то таких вариантов еще можно настрогать :-)
0
 Аватар для rar
2 / 2 / 0
Регистрация: 04.02.2016
Сообщений: 458
08.08.2017, 14:54  [ТС]
Garry Galler ,
ваш код в ответе #2 у меня работает,

причина была в том , насколько я понял ) ,
что метод list(set(sublist) & set(list_find)) (т.е. получение пересечений списков )
давал хаотичное перемешивание списка
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
08.08.2017, 15:11
Цитата Сообщение от rar Посмотреть сообщение
list(set(sublist) & set(list_find))
Это же не из поста №2?
Что касается изменения порядка при получении пересечения, то в данном случае оно не имеет никакого значения.
Пересечение просто замена проверки на вхождение (x in y, x.__contains__(y) ). И то в каком порядке будут получены общие элементы для последующих операций не важно.
Все три (не считая того, что использует сортировку) кода у меня дают идентичные результаты.
P.S. Но все они не будут иметь производительности sort, поскольку основные операции выполняются на уровне интерпретатора, тогда как sort\sorted работают на уровне высокоэффективных машинных инструкций.
0
 Аватар для rar
2 / 2 / 0
Регистрация: 04.02.2016
Сообщений: 458
08.08.2017, 15:45  [ТС]
да, не из поста #2 я для примеру привел )
имеется ввиду что ваш скрипт включен в общий скрипт в котором в свою очередь и содержится подобная конструкция пересечений списков.
к sort и sorted вопросов нету )
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.08.2017, 15:45
Помогаю со студенческими работами здесь

Переместить элемент списка в начало
Вот такой пример кода: <ul id="fortask1" class="adds"> <li id="lik4" class="lid">..</li> <li id="lik3"...

Переместить слова в начало строки
Добрый день! Дана строка CString типа, перем m_f и m_last указывают диапазон слов, которые надо перенести в начало строки. char...

Переместить последнюю букву в начало
Сделать нужно в WF, после ввода слова и нажатия на кнопку нужно переместить последнюю букву в начало.

Переместить слова в начало строки
Доброй ночи, Застрял на задачке, Условие: функция, для поиска слов в строке, начинающихся с заглавной, должна возвращать массив...

Переместить минимальные элементы в начало
Одномерный массив длиной N Переместить минимальные элементы в начало, сдвинув остальные элементы вправо.


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
YAFU@home — распределённые вычисления для математики. На CPU
Programma_Boinc 20.01.2026
YAFU@home — распределённые вычисления для математики. На CPU YAFU@home — это BOINC-проект, который занимается факторизацией больших чисел и исследованием aliquot-последовательностей. Звучит. . .
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru