#python #tuples
#python #кортежи
Вопрос:
У меня есть упорядоченный кортеж данных:
my_data = (1,2,3,2,4,2,3,3,5,7,5,3,6,8,7)
Как я могу подмножество элементов кортежа таким образом, чтобы все элементы, включая и после первого экземпляра 3, сохранялись до первого значения == 7? Например, результат должен быть:
desired_output = (3,2,4,2,3,3,5,7)
Ответ №1:
Я не уверен, что вы подразумеваете под порогом (значение = = 7 или любое значение> = 7), но вот решение:
my_data = (1,2,3,2,4,2,3,3,5,7,5,3,6,8,7)
index1 = my_data.index(3)
index2 = my_data.index(7)
desired_output = my_data[index1:index2 1]
print desired_output
Комментарии:
1. Я прояснил вопрос на основе вашего ответа.
Ответ №2:
my_data.index(my_data.index(min_thre):my_data.index(max_thre) 1)
Ответ №3:
found_three = False
res = []
for d in data:
if d == 3:
found_three = True
if found_three:
res.append(d)
if d == 7;
break
Комментарии:
1. Хотя этот фрагмент кода может решить вопрос, включение объяснения действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос для читателей в будущем, и эти люди могут не знать причин вашего предложения по коду.
Ответ №4:
itertools
имеет dropwhile
и takewhile
что вы можете использовать в своих интересах. Используйте dropwhile
, чтобы отбросить все до первого 3
, а takewhile
затем взять все до первых 7. Затем просто объедините два
import itertools
L = [1,2,3,2,4,2,3,3,5,7,5,3,6,8,7]
answer = list(itertools.takewhile(lambda x: x!=7, itertools.dropwhile(lambda x: x!=3, L)))
answer.append(7)
In [49]: answer
Out[49]: [3, 2, 4, 2, 3, 3, 5, 7]
Комментарии:
1.
desired_output
требуется, чтобы это был кортеж, а не список2. @MichaelMaggs: затем используйте
tuple(...)
, чтобы превратить этот список в кортеж