Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
 Аватар для Михалыч
1011 / 355 / 59
Регистрация: 28.02.2013
Сообщений: 939

Как лучше сделать срез двух списков

03.12.2019, 16:28. Показов 2054. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, подскажите как лучше сделать срез двух списков.
Например есть:
Python
1
2
a = [1.21, 1.11, 0.99, 0.59, 0.23, 0.11, -0.05, -0.2]
b = [1.00, 2.00, 3.00, 4.00, 5.00, 6.00, 7.00, 8.00]
Нужно из списка "а" убрать значения больше 1 и меньше 0, что бы осталось:
Python
1
a = [0.99, 0.59, 0.23, 0.11]
и убрать соответствующие по индексам значения из b, что бы осталось:
Python
1
b = [3.00, 4.00, 5.00, 6.00]
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.12.2019, 16:28
Ответы с готовыми решениями:

Как из двух списков сделать один список кортежей/списков
Доброго времени суток! Буду очень благодарен, если поможете из двух списков, к примеру a и b, сделать список c, который содержит пары...

Как лучше найти и вывести одинаковые элементы двух списков?
Дано два списка строками с целыми числами через пробел. Необходимо вывести уникальные элементы(1 раз - 1 элемент), которые присутствуют и в...

Как сделать слияние двух списков с последующей сортировкой?
Даны два списка. Необходимо слить два списка в один, отсортировать по убыванию и вывести. Вводится целое число N и N чисел со...

14
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
03.12.2019, 16:37
Такие вещи на numpy хорошо делать. Если без, то можно так:
Python
1
zip((itm_a, itm_b) for (itm_a, itm_b) in zip(a,b) if 0<itm_a<1)
Не проверял, но идея такова.
2
 Аватар для Михалыч
1011 / 355 / 59
Регистрация: 28.02.2013
Сообщений: 939
03.12.2019, 17:03  [ТС]
dondublon, спасибо буду учить в ту сторону)

Пока для себя сделал так:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
a = [1.21, 1.11, 0.99, 0.59, 0.23, 0.11, -0.05, -0.2]
b = [1.00, 2.00, 3.00, 4.00, 5.00, 6.00, 7.00, 8.00]
 
temp_b=[]
temp_a=[]
 
for i in a:
    if 1>i>0:
      temp_a.append(i)
      temp_b.append(b[a.index(i)])
 
print(temp_a)
print(temp_b)
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
03.12.2019, 17:11
Михалыч, ну я, в общем, так и предложил, только чуть короче.

Добавлено через 1 минуту
Хотя a.index(i) будет сильно тормозить.
0
 Аватар для Михалыч
1011 / 355 / 59
Регистрация: 28.02.2013
Сообщений: 939
03.12.2019, 17:16  [ТС]
Цитата Сообщение от dondublon Посмотреть сообщение
только чуть короче.
ничего себе чуть короче, в 10(!) раз. Ваш вариант мне намного больше нравится, читаю про zip.

Цитата Сообщение от dondublon Посмотреть сообщение
Хотя a.index(i) будет сильно тормозить.
спасибо)
0
Эксперт Python
 Аватар для dondublon
4653 / 2073 / 366
Регистрация: 17.03.2012
Сообщений: 10,183
Записей в блоге: 6
03.12.2019, 17:27
С небольшой поправкой:
Python
1
2
3
new_a, new_b = zip(*((itm_a, itm_b) for (itm_a, itm_b) in (zip(a,b)) if 0<itm_a<1))
 
print(new_a, new_a)
Добавлено через 6 минут
А вот на numpy.
Если a и b являются отдельными 1-d массивами:
Python
1
2
3
indices = 0<a<1
a[indices]
b[indices]
если же их заранее склеить в 2d из двух строк, то
Python
1
ab[:, 0<ab[0]<1]
Тоже не проверял. Ещё есть вариант с двумя столбцами (вместо строк), примерно также по краткости.

Добавлено через 40 секунд

Не по теме:

ничего себе чуть короче, в 10(!) раз.
Это у меня йумор такой.

2
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
03.12.2019, 17:45
Python
1
2
3
4
for i, j in zip(a, b):
    if 0 < i < 1:
        temp_a.append(i)
        temp_b.append(j)
1
 Аватар для Semen-Semenich
5237 / 3481 / 1176
Регистрация: 21.03.2016
Сообщений: 8,310
03.12.2019, 18:45
Python
1
2
3
4
5
6
for i in reversed(range(len(a))):
     if 0 > a[i] or a[i] >1 :
          a.pop(i)
          b.pop(i)
 
print(a,b,sep = '\n')
1
03.12.2019, 18:58

Не по теме:

Semen-Semenich, чёрт подери, я потратил минут 10 на рассматривание твоего кода.

0
03.12.2019, 19:12

Не по теме:

Рыжий Лис, ну имеет право быть. без дополнительных списков

0
04.12.2019, 10:21

Не по теме:

Рыжий Лис, ну имеет право быть. без дополнительных списков
Не люблю такой подход. Изменяемость - зло.

0
 Аватар для Михалыч
1011 / 355 / 59
Регистрация: 28.02.2013
Сообщений: 939
26.12.2019, 10:40  [ТС]
Цитата Сообщение от Михалыч Посмотреть сообщение
Пока для себя сделал так:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
a = [1.21, 1.11, 0.99, 0.59, 0.23, 0.11, -0.05, -0.2]
b = [1.00, 2.00, 3.00, 4.00, 5.00, 6.00, 7.00, 8.00]
 
temp_b=[]
temp_a=[]
 
for i in a:
    if 1>i>0:
      temp_a.append(i)
      temp_b.append(b[a.index(i)])
 
print(temp_a)
print(temp_b)
Для других кому попадется эта тема:

Вот так как я лучше не делать, потому что a.index(i) вернет первое попавшееся значение из списка, и если в списке "а" будет несколько повторяющихся значений, то этот код будет работать не корректно.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
a = [1.21, 0.99, 0.99, 0.59, 0.23, 0.11, -0.05, -0.2]
b = [1.00, 2.00, 3.00, 4.00, 5.00, 6.00, 7.00, 8.00]
 
temp_b=[]
temp_a=[]
 
for i in a:
    if 1>i>0:
      temp_a.append(i)
      temp_b.append(b[a.index(i)])
 
print(temp_a)
print(temp_b)
вернет два раза двойку из списка ''b":
Python
1
2
[0.99, 0.99, 0.59, 0.23, 0.11]
[2.0, 2.0, 4.0, 5.0, 6.0]
В других ответах работает так как надо)
0
Особый статус
Эксперт WindowsВирусоборец
8429 / 1708 / 87
Регистрация: 15.04.2011
Сообщений: 5,520
26.12.2019, 11:36
Python
1
2
3
a = [1.21, 1.11, 0.99, 0.59, 0.23, 0.11, -0.05, -0.2]
b = [1.00, 2.00, 3.00, 4.00, 5.00, 6.00, 7.00, 8.00]
print([numbers for numbers in a if 0 < numbers < 1], [b[a.index(numbers)] for numbers in a_slice])
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
26.12.2019, 11:41
NameError: name 'a_slice' is not defined
0
Особый статус
Эксперт WindowsВирусоборец
8429 / 1708 / 87
Регистрация: 15.04.2011
Сообщений: 5,520
26.12.2019, 11:52
А так без индексов:
Python
1
2
3
a = [1.21, 1.11, 0.99, 0.59, 0.23, 0.11, -0.05, -0.2]
b = [1.00, 2.00, 3.00, 4.00, 5.00, 6.00, 7.00, 8.00]
print([a[numbers] for numbers in range(len(a)) if 0 < a[numbers] < 1], [b[numbers] for numbers in range(len(a)) if 0 < a[numbers] < 1])
Добавлено через 1 минуту
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
NameError: name 'a_slice' is not defined
Там поправить надо - остались переменные которые, по сути, не нужны.
Ну и тот код хуже...в стратегическом плане)

Добавлено через 3 минуты
Но лично я против всякого рода сокращений ради пресловутой оптимизации - читать такой код через недельку это ад...
По хорошему делать нормальный разрыв, не стоит безумно гнаться за краткостью - многие начинающие за этим прямо гонятся, как я заметил
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.12.2019, 11:52
Помогаю со студенческими работами здесь

Как сделать взаимодействие двух выпадающих списков значения, которых берутся из базы данных?
Как сделать взаимодействие двух выпадающих списков значения, которых берутся из базы данных? Привожу свой код для уточнения вопроса: ...

Как сделать срез ?
На вход в первой строчке поступает длина последовательности,в следующей строчке сама последовательность,нужно определить максимальную сумму...

Как лучше сделать выборку из двух таблиц?
У меня две таблицы: ID|Предметы 1|Фрукты 2|Обощи 3|Мясо и ID|Наименование|ID_Предмета 1|Яблоки|1 2|Груши|1

Как сделать такой срез строки?
Фамилия и инициалы Дана строка с фамилией и инициалами. Выведите срез строки, состоящий из фамилии.

Из двух списков сделать один
С помощью функционала необходимо из двух списков: (1 2 3 4 ...) и (a b c d ...) сделать один список вида: (a 1 b 2 c 3 d 4 ....). ...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Вывод данных через динамический список в справочнике
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru