#python #python-3.x
#python #python-3.x
Вопрос:
У меня есть список списков, в которых мне нужно переместить второй и третий элемент, который нужно вставить, в первый элемент (который является списком) на первом и последнем месте соответственно. Затем мне нужно удалить элементы после использования.
У меня уже есть цикл for, который будет работать в первом экземпляре, но я не уверен, как безопасно удалить эти элементы и перейти к следующему набору и повторить операцию. Я понимаю, что циклы for не подходят для удаления элементов.
Пример списка
x = ['string 1', 1, 2, 'string 2', 0, 'string 3'], 'new string 1', 'new string 2', ['string 3', 19, 2, 'string 4', 0, 'string 5'], 'new string 3', 'new string 4', ['string 6', 1, 2, 'string 7', 0, 'string 8'], 'new string 5', 'new string 6', ['string 9', 19, 2, 'string 10', 0, 'string 11']
где new string 1
должно быть помещено перед string 1
и new string 2
добавляется к списку, тогда все первые 10 значений (технически первые 3 элемента, поскольку первый является списком) удаляются.
Следующий цикл for достигает этого для одного экземпляра
def sorting_insert_list(x):
x = list(x)
for i in range(len(x)):
keyword = x[1]
location = x[2]
x[0].append(location)
x[0].insert(0, keyword)
print(x)
и возвращает следующие результаты
[['new string 1', 'string 1', 1, 2, 'string 2', 0, 'string 3', 'new string 2'], 'new string 1', 'new string 2', ['string 3', 19, 2, 'string 4', 0, 'string 5'], 'new string 3', 'new string 4', ['string 6', 1, 2, 'string 7', 0, 'string 8'], 'new string 5', 'new string 6']
Окончательный список, который мне нужен, будет выглядеть следующим образом:
sorted_list = ['new string 1', 'string 1', 1, 2, 'string 2', 0, 'string 3','new string 2',] ['new string 3''string 3', 19, 2, 'string 4', 0, 'string 5', 'new string 4',], ['new string 5','string 6', 1, 2, 'string 7', 0, 'string 8','new string 6']
Возможно, стоит отметить, что я буду делать это для огромного списка, я просто упростил данные, чтобы показать в качестве примера. Спасибо.
Добавление попытки включить дату, которая затем появляется в списке после new string 2
и в позиции x[3] :
def sorting_insert_list(x):
result = []
for i in range(0, len(3)):
keyword = x[i 1]
location = x[i 2]
date = insert_values[i 3]
result = [[keyword] x[i] [location] date]
x = result
print(x)
Комментарии:
1. Извиняюсь, обновил список
x
Ответ №1:
Я думаю, что лучший способ сделать это — отказаться от исходного списка x
и создать новый список для составления вашего результата, вместо удаления 2-го, 3-го элементов из списка, вы можете попробовать это:
# list comprehension, more pythonic
def sorting_insert_list(x):
x = [[x[i 1]] x[i] [x[i 2]] for i in range(0, len(x) // 3 * 3, 3)]
print(x)
# base on your version
def sorting_insert_list(x):
result = []
for i in range(0, len(x) // 3 * 3, 3):
keyword = x[i 1]
location = x[i 2]
result = [[keyword] x[i] [location]]
x = result
print(x)
тест:
x = [['string 1', 1, 2, 'string 2', 0, 'string 3'], 'new string 1', 'new string 2',
['string 3', 19, 2, 'string 4', 0, 'string 5'], 'new string 3', 'new string 4',
['string 6', 1, 2, 'string 7', 0, 'string 8'], 'new string 5', 'new string 6',
['string 9', 19, 2, 'string 10', 0, 'string 11']]
sorting_insert_list(x)
вывод:
[['new string 1', 'string 1', 1, 2, 'string 2', 0, 'string 3', 'new string 2'], ['new string 3', 'string 3', 19, 2, 'string 4', 0, 'string 5', 'new string 4'], ['new string 5', 'string 6', 1, 2, 'string 7', 0, 'string 8', 'new string 6']]
кстати, len(x) // 3 * 3
используется для игнорирования хвоста, который меньше 3, как в вашем примере. Если вы уверены len(x) % 3 == 0
, вы можете просто использовать len(x)
Надеюсь, это поможет вам, и прокомментируйте, если у вас возникнут дополнительные вопросы. 🙂
Комментарии:
1. Большое спасибо, отлично работает! Я выбрал второй пример, так как мне было немного легче понять! также я использовал
len(x)
, как вы упомянули. Еще раз спасибо!2. Я пишу вторую версию на случай, если вы не знакомы с python. рад, что это вам помогает. : )
3. Мне также нужно добавить
date
значение в конец списка, но я получаю следующую ошибкуTypeError: can only concatenate list (not "datetime.date") to list
. Я обновляю приведенный выше код, чтобы показать, что я делаю, чтобы попытаться достичь этого.4. использование
append
, вместо=
может помочь вам