Как удалить первое и последнее значение первого и последнего элемента, которые разделены (.) И нужно объединить другие элементы в списке - PullRequest
0 голосов
/ 25 января 2019

У меня есть такой список python

['6403687.6403773','6404555.6404614','6413270.6413335']

. В этом мне нужно удалить первое значение первого элемента (6403687) и последнее значение последнего элемента (6413335), и мне нужно присоединиться кдругой элемент, подобный этому ['6403773.6404555', '6404614.6413270']. Вот так у меня есть несколько списков с n значениями. Я не знаю, как это сделать. Если кто-нибудь, пожалуйста, помогите мне.

list = ['6403687.6403773','6404555.6404614','6413270.6413335']

После удаленияпервое и последнее значения, мне нужен такой список

list1 = ['6403773.6404555','6404614.6413270']

Ответы [ 4 ]

0 голосов
/ 25 января 2019

Хотя многие люди ответили на этот вопрос, я хотел бы представить другой и простой способ сделать это для длинного списка, используя простой цикл for.

aa = ['6403687.6403773','6404555.6404614','6413270.6413335']
pr, bb ="", []
for v in aa:
    l, r = v.split(".")
    bb.append(f"{pr}.{l}")
    pr = r
print (bb[1:])

Выход:

#Result: ['6403773.6404555', '6404614.6413270']

Надеюсь, этому способствует:)

0 голосов
/ 25 января 2019

Предполагая, что в вашем списке всегда есть счет 3, поскольку вы ничего не сообщили о его динамичности:

startList = ['6403687.6403773','6404555.6404614','6413270.6413335']
newList = []
newList.append(startList[0].split('.')[1] + '.' + startList[1].split('.')[0])
# split first value and take second half and concat with the middle value's first half
newList.append(startList[1].split('.')[1] + '.' + startList[2].split('.')[0])
# split last value and take first half and concat with the middle value's second half

Выход:

['6403773.6404555','6404614.6413270']
0 голосов
/ 25 января 2019

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

number_strings = ['6403687.6403773','6404555.6404614','6413270.6413335']

# remove first part of element
number_strings[0] = number_strings[0].split('.')[1]

# remove last part of last element
number_strings[-1] = number_strings[-1].split('.')[0]

# remove points
number_strings_rearranged = []
for element in number_strings:
    for part_string in element.split('.'):
        number_strings_rearranged.append(part_string)

# restructure with points
number_strings = [number_strings_rearranged[i]+'.'+number_strings_rearranged[i+1] for i in range(0, len(number_strings_rearranged)-1, 2)]

print(number_strings)

Выход:

['6403773.6404555', '6404614.6413270']
0 голосов
/ 25 января 2019

Ну, один из способов сделать это будет следующим:

from itertools import islice

lst = ['6403687.6403773','6404555.6404614','6413270.6413335']

# split at ".", flatten and remove both ends (slice)
flat = [num for pair in lst for num in pair.split('.')][1:-1]

# pair the entries in 2s and join them
res = ['.'.join(islice(flat, 2)) for _ in range(len(flat)//2) ]

, который выдает:

print(res)  # -> ['6403773.6404555', '6403773.6404555']

В качестве альтернативы, если вам не нравится последний шаг с islice (я тоже не большой поклонник), вы можете использовать рецепт grouper itertool :

def grouper(iterable, n, fillvalue=None):
    "Collect data into fixed-length chunks or blocks"
    # grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx"
    args = [iter(iterable)] * n
    return zip_longest(*args, fillvalue=fillvalue)

и делать вместо него

res = ['.'.join(group) for group in grouper(flat, 2)]

с такими же результатами, конечно.

...