2015-11-06 3 views
2

Из-за какой-то нарезку я сделал ранее в моем сценарии я закончил с огромным кортежем, который выглядит следующим образом:Как преобразовать некоторые элементы в кортеж из списка в float?

(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, [102.37], [129.6], [190.64], [181.98], [192.79]) 

В приведенном выше примере первые 7 пунктов являются поплавки и другие такие списки, содержащие один элемент каждый , которые также являются плавающими.

Я хотел бы избавиться от списков и сохранить поплавки, чтобы я мог добавить все значения для расчета средней цены акций на 6-месячный период.

Что является самым питоническим способом достижения этого?

+0

вы хотите, чтобы в конечном итоге с кортежем снова? или вам нужен список? –

+0

Я хочу сохранить кортеж. –

ответ

8

Эта функция возвращает поплавок ли оно дано поплавок или список:

def delistify(x): 
    try: 
     return x[0] 
    except TypeError: 
     return x 

Если вам нужен выход, чтобы быть кортеж, вы можете использовать его как:

print tuple(delistify(x) for x in my_list) 

Или, если список также хорошо, самый вещий список понимание:

print [ delistify(x) for x in my_list ] 
+1

приятно! что сделал трюк, спасибо товарищу. –

-1

Если вы хотите, чтобы извлечь номера из списка:

In [1]: t = (0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, [102.37], [129.6], [190.64], [181.98], [192.79]) 
In [2]: tuple(tt if isinstance(tt, float) else tt[0] for tt in t) 
Out[2]: (0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 102.37, 129.6, 190.64, 181.98, 192.79) 

Если вы хотите, чтобы «избавиться от» списков:

In [3]: tuple(tt for tt in t if isinstance(tt, float)) 
Out[3]: (0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0) 
+0

Проверка типа с использованием функции 'type' не является надежной. Вместо этого вы должны использовать 'isinstance'. –

+0

@ScottHunter yup - автоматически OP хочет извлечь номера из списков. – xnx

Смежные вопросы