У меня есть список, как показано ниже, где первый элемент является идентификатором, а другой является строкой:
[(1, u'abc'), (2, u'def')]
Я хочу создать список идентификаторов только из этого списка кортежей, как показано ниже:
[1,2]
Я буду использовать этот список, __in
поэтому он должен быть списком целочисленных значений.
ты имеешь в виду что-то подобное?
На самом деле у вас есть список
tuple
объектов, а не список множеств (как и предполагал ваш первоначальный вопрос). Если это на самом деле список наборов, то первого элемента не существует, поскольку наборы не имеют порядка.Здесь я создал плоский список, потому что в целом это кажется более полезным, чем создание списка из 1 элемента кортежей. Тем не менее, вы можете легко создать список кортежей из 1 элемента, просто заменив
seq[0]
на(seq[0],)
.источник
int() argument must be a string or a number, not 'QuerySet'
int()
нигде в моем решении, поэтому исключение, которое вы видите, должно появиться позже в коде.__in
для фильтрации данных__in
? - На основе приведенного вами примера ввода будет создан список целых чисел. Однако, если ваш список кортежей не начинается с целых чисел, вы не получите целые числа, и вам нужно будет сделать их целыми числами черезint
или попытаться выяснить, почему ваш первый элемент не может быть преобразован в целое число.new_list = [ seq[0] for seq in yourlist if type(seq[0]) == int]
?Вы можете использовать «распаковку кортежей»:
Во время итерации каждый кортеж распаковывается и его значения устанавливаются в переменные
idx
иval
.источник
Это для чего
operator.itemgetter
.itemgetter
Оператор возвращает функцию , которая возвращает индекс элемента , который вы укажете. Это точно так же, как писатьНо я считаю , что
itemgetter
это яснее и более четко .Это удобно для создания компактных операторов сортировки. Например,
источник
С точки зрения производительности, в python3.X
[i[0] for i in a]
иlist(zip(*a))[0]
эквивалентныlist(map(operator.itemgetter(0), a))
Код
вывод
3.491014136001468e-05
3.422205176000717e-05
источник
если кортежи уникальны, то это может сработать
источник
ordereddict
, хотя.когда я побежал (как предложено выше):
вместо возвращения:
Я получил это как возвращение:
Я обнаружил, что должен был использовать list ():
успешно вернуть список, используя это предложение. Тем не менее, я доволен этим решением, спасибо. (протестировано / запущено с использованием Spyder, консоли iPython, Python v3.6)
источник
Я подумал, что было бы полезно сравнить время выполнения разных подходов, поэтому я сделал тест (используя библиотеку simple_benchmark )
I) бенчмарк с кортежами из 2 элементов
Как вы можете ожидать, выбор первого элемента из кортежей по индексу
0
будет самым быстрым решением, очень близким к решению по распаковке, ожидая ровно 2 значения.II) бенчмарк с кортежами из 2 или более элементов
источник
Это кортежи, а не наборы. Ты можешь сделать это:
источник
Вы можете распаковать свои кортежи и получить только первый элемент, используя понимание списка:
вывод:
это будет работать независимо от того, сколько элементов у вас в кортеже:
вывод:
источник
Я задавался вопросом, почему никто не предложил использовать numpy, но теперь, после проверки, я понимаю. Возможно, это не лучший вариант для массивов смешанного типа.
Это было бы решением в numpy:
источник