2016-11-17 2 views
0

Я пытаюсь разделить первый элемент списка двух элементов, для exapmle Я пытаюсь преобразовать:Как я могу разделить список вещь

l= [('pzibley/09.03', [8, 0, 2, 0, 0]), ('pzibley/09.01', [7, 2, 0, 0, 1])] 

к:

l= [([pzibley], [09.03], [8, 0, 2, 0, 0]), ([pzibley] , [09.01], [7, 2, 0, 0, 1])] 

I попробовали несколько способов, но поскольку я любитель, я не в состоянии это сделать.

+1

сообщение одного способов, которые вы пробовали, и вы получите некоторую помощь, поверьте мне –

+0

Вы должны уточнить типы данных, которые вы ожидаете для этого разделения, потому что в настоящее время есть два ответа, которые одинаково правильны, но в зависимости от того, какой окончательный результат на самом деле должен быть , то есть «09.03» должно быть float или str? – idjaw

ответ

2
[tuple([j] for j in i[0].split('/')) + (i[1],) for i in l] 

# [(['pzibley'], ['09.03'], [8, 0, 2, 0, 0]), 
# (['pzibley'], ['09.01'], [7, 2, 0, 0, 1])] 
+0

Это не накладывает 'float' на вторую часть разделенной строки – James

+0

@James Правда, она не уверена, что OP хочет, чтобы это было выполнено. У ОП все еще есть '09.03' – Psidom

+0

Да ... хороший момент, я не заметил. – James

0
l = [('pzibley/09.03', [8, 0, 2, 0, 0]), ('pzibley/09.01', [7, 2, 0, 0, 1])] 

for i in range(len(l)): 
    l[i]=(l[i][0].split('/'),l[i][1]) 

print(l) 

Поскольку кортежи являются неизменяемыми, вы должны передать на весь кортеж, а не только первый элемент кортежа.

1

Определить функцию, которая разделяет каждую часть на входе tuple и собирает их в один кортеж:

def splitter(tpl): 
    a,b = tpl[0].split("/") 
    return(([a], [float(b)] , tpl[1])) 

Мы можем перебирать функцию splitter над списком l:

[splitter(x) for x in l] 

Забегая дает :

In [5]: [splitter(x) for x in l] 
Out[5]: 
[(['pzibley'], [9.03], [8, 0, 2, 0, 0]), 
(['pzibley'], [9.01], [7, 2, 0, 0, 1])] 
0

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

l_new=[] 
l= [('pzibley/09.03', [8, 0, 2, 0, 0]), ('pzibley/09.01', [7, 2, 0, 0, 1])] 
for i in l: 

    temp = i[0].split('/') 
    l_new.append(([temp[0]],[temp[1]],i[1])) 
print(l_new) 
#[(['pzibley'], ['09.03'], [8, 0, 2, 0, 0]), (['pzibley'], ['09.01'], [7, 2, 0, 0, 1])] 
+0

Это неправильный выход. Посмотрите еще раз на ожидаемый выход OP. – idjaw

+0

спасибо idyaw, пропустил бит кортежа ... но это нормально, у нас есть копировальные машины, такие как Джеймс, чтобы получить полный кредит за исправление работы людей. Настроение нереально – FancyDolphin

3
new_l = [] 
for tup in l: 
    a,b = tup[0].split('/') 
    new_l.append(([a], [float(b)], tup[1])) 

new_l 
# [(['pzibley'], [9.03], [8, 0, 2, 0, 0]), (['pzibley'], [9.01], [7, 2, 0, 0, 1])] 
+0

Будет ли использование 'append' более медленным, чем альтернативные ответы здесь, в которых используется понимание списка? –

+0

В общем, да. Однако, если это не работает на очень больших объемах данных, разница незначительна. – James