2010-07-14 3 views
2

Как извлечь элементы в списке списков и создать еще один в python. Итак, я хочу, чтобы получить от этого:извлечение из списка списков

all_list = [['1 2 3 4','2 3 4 5'],['2 4 4 5', '3 4 5 5' ]] 

новый список, как это:

list_of_lists = [[('3','4'),('4','5')], [('4','5'),('5','5')]] 

Ниже то, что я сделал, и он не работает.

for i in xrange(len(all_lists)): 
    newlist=[] 
    for l in all_lists[i]: 
     mylist = l.split() 
     score1 = float(mylist[2]) 
     score2 = mylist[3] 
     temp_list = (score1, score2) 
     newlist.append(temp_list) 
    list_of_lists.append(newlist) 

Помогите. Спасибо заранее.

+3

Можете ли вы уточнить, какие части списка вы хотите? –

+0

Я хочу получить 3-й и 4-й цифры каждого элемента списка в списке «all_list». Извините, не знаю, как еще это объяснить. – DGT

ответ

2

Он может работать почти как есть, если вы заполнили значение для mylist - прямо сейчас его не определено.

Подсказка: используйте функцию split на строках, чтобы разбить их на свои компоненты, и вы можете заполнить мой список результатом.

Подсказка 2. Убедитесь, что новый список в какой-то момент установлен в пустой список.

+0

вы правы, я забыл вернуться в пустой список. Благодарю. – DGT

3

Вы можете использовать понимание вложенного списка. (Это предполагает, что вы хотите, последние две «десятки» выхода из каждой строки):

[[tuple(l.split()[-2:]) for l in list] for list in all_list] 
+0

Отлично, я попробую. Большое спасибо. – DGT

+0

@ DGT: Добро пожаловать. – sdolan

2

Добавление к eruciforms answer.

Первое замечание, вам не нужно создавать индексы для списка all_list. Вы можете просто итерацию над ним непосредственно:

for list in all_lists: 
    for item in list: 
     # magic stuff 

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

values = item.split()[-2:] # select last two numbers. 

сведя его дальнейшего использования карты или список понимание; вы можете сделать все элементы поплавок на лета:

# make a list from the two end elements of the splitted list. 
values = [float(n) for n in item.split()[-2:]] 

И tuplify полученного списка с tuple встроенными:

values = tuple([float(n) for n in item.split()[-2:]]) 

В конце концов, вы можете свернуть все это в один большой список понимание как sdolan shows.

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

Принял некоторые ограничения с вашими именами переменных, значения будут tmp_list в вашем примере.

+0

Большое спасибо за вашу помощь. – DGT

+0

@ DGT: Добро пожаловать. – Skurmedel

+0

Хорошее объяснение. Кроме того, спасибо, что напомнили мне, что деление по умолчанию - это пробелы. – sdolan

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