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

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

03.12.2019, 16:28. Показов 1997. Ответов 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
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 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
Сообщений: 937
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
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
03.12.2019, 17:11
Михалыч, ну я, в общем, так и предложил, только чуть короче.

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

Цитата Сообщение от dondublon Посмотреть сообщение
Хотя a.index(i) будет сильно тормозить.
спасибо)
0
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 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
5222 / 3469 / 1173
Регистрация: 21.03.2016
Сообщений: 8,295
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
Сообщений: 937
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
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Киев стоит - украинская песня
zorxor 28.01.2026
wfWdiRqdTxc О Господи, Вечный, Ты . . . Я помоги, Бесконечный. . . Я прошу Ты. . . Я погибаю, спаси. . . Я прошу Тебя Вечный. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru