2

я следующий список кортежей:Проблемы при изменении списка кортежей, беря только первое значение кортежа?

>>>lis = df['vals'].values.tolist() 
>>>lis 
[[('apple', 'FRUIT'), 
      ('$', 'SYM'), 
      ('6.00', 'X'), 
      ('bannana', 'FRUIT'), 
      ('$', 'SYM'), 
      ('4.00', 'X')]] 

Как я могу переформатировать его в:

lis = [['apple: $ 6.00', 'bannana: $ 4.00']] 

Я попытался:

list_comp = [item for sublist in lis for item in sublist] 
list_comp = [' '.join(item) for t in list_comp for item in [t]] 

Однако я не понимаю, как поставить : и вышеуказанный формат.

+0

'[[apple: $ 6.00 bannana: $ 4.00]]' это не тип python. что/какая часть? строка? номер? являются ли они разными значениями внутри списка? это 1 список из 1 списка из 1 элемента, который является строкой? – Dekel

+0

проверьте второй блок кода в своем вопросе. То, что там происходит? – Dekel

+0

обновите вопрос, потому что это действительно непонятно. – Dekel

ответ

3

Вы можете использовать понимание и сцепить ": $ " с кортежей элементов:

print [lis[0][i][0] + ": $ " + lis[0][i+2][0] for i in range(0,len(lis[0]),3)] 
3

Во-первых, определим функцию:

>>> def format_tuple(fruit, sym, x): 
... return "{}: {} {}".format(fruit, sym, x) 
... 

Затем

>>> my_list 
[[('apple', 'FRUIT'), ('$', 'SYM'), ('6.00', 'X'), ('bannana', 'FRUIT'), ('$', 'SYM'), ('4.00', 'X')]] 
>>> my_list = my_list[0] 
>>> by_three = (my_list[i:i + 3] for i in range(0,len(my_list), 3)) 
>>> [format_tuple(*(c[0] for c in chunk)) for chunk in by_three] 
['apple: $ 6.00', 'bannana: $ 4.00'] 

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

>>> [[format_tuple(*(c[0] for c in chunk)) for chunk in by_three]] 
[['apple: $ 6.00', 'bannana: $ 4.00']] 
Смежные вопросы