Python: Lits связывающих кортежей и long int - PullRequest
2 голосов
/ 12 марта 2010

У меня есть список, содержащий кортежи и длинные целые числа, список выглядит так:

   table = [(1L,), (1L,), (1L,), (2L,), (2L,), (2L,), (3L,), (3L,)]

Как мне преобразовать таблицу, чтобы она выглядела как формальный список?

так что результат будет:

table = ['1','1','1','2','2','2','3','3']

В информационных целях данные получены из базы данных MySQL.

Ответы [ 3 ]

8 голосов
/ 12 марта 2010
>>> table = [(1L,), (1L,), (1L,), (2L,), (2L,), (2L,), (3L,), (3L,)]
>>> [int(e[0]) for e in table]
[1, 1, 1, 2, 2, 2, 3, 3]

>>> [str(e[0]) for e in table]
['1', '1', '1', '2', '2', '2', '3', '3']
2 голосов
/ 12 марта 2010

С itertools

import itertools

>>> x=[(1L,), (1L,), (1L,), (2L,), (2L,), (2L,), (3L,), (3L,)]
>>>
>>> list(itertools.chain(*x))
[1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L]
>>>
>>> map(str,itertools.chain(*x))
['1', '1', '1', '2', '2', '2', '3', '3']
1 голос
/ 12 марта 2010

Вам не следует беспокоиться о различиях между целыми и длинными. Если вы когда-нибудь попытаетесь напечатать длинный, L исчезнет.

nums = [1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L]
>>> for num in nums:
...     print num,
1 1 1 2 2 2 3 3

Кроме того, почему вы хотите, чтобы в вашем списке результатов были строки? Вы должны хранить их как цифры вплоть до того момента, когда вы захотите их напечатать. Затем вы можете преобразовать их в строки, используя форматирование строк (что также является более гибким. Особенно, если вы начинаете работать с числами с плавающей запятой или десятичными числами.

>>> print "Your number is: %d" % 1L
Your number is 1
>>> print "If we're talking money, you might want $%.2f" % 2L
If we're talking money, you might want $2.00

Все будет работать так, как вы ожидаете. Буква L отображается только в repr длинных, так что вы знаете, что работаете с длинными вместо целых.

Чтобы вытащить их из кортежей, вы можете сделать:

>>> nums = [(1L,), (1L,), (2L,), (3L,)]
>>> nums = [x[0] for x in nums]

Что копирует ваш список в новый список, или вы можете сделать:

>>> for i, num in enumerate(nums):
...     nums[i] = num

>>> for i in xrange(nums):
...     nums[i] = int(nums[i])

Что изменит ваш первоначальный список, а не создаст новый. В обоих случаях nums будет содержать список long.

...