在列表Python中连接连续对

2024-09-28 05:21:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我想采取一个列表输入(可以有各种长度),并创建新的名单加入每个潜在的连续对。你知道吗

例如:

mylist = ['07', '05', '66', '06755', '04']

将返回如下:

['0705', '66', '06755', '04']
['07', '0566', '06755', '04']
['07', '05', '6606755', '04']
['07', '05', '66', '0675504']

我已经写了下面的代码,但我希望有一个更好的方法,因为我担心切片可能会遇到问题。你知道吗

def joinConsecutive(nums):

    parts = len(nums)
    newNums = []

    # Join 1st and 2nd parts
    merge1 = [''.join(nums[0:2])] + nums[2:]
    newNums.append(merge1)

    # Join 2nd and 3rd parts, etc.
    i = 1
    while i <= parts - 2:
        start = nums[0:i]
        mid = [''.join(nums[i:i+2])]

        # When joining 2nd-to-last and last parts, this end just gets ignored
        end = nums[i+2:]
        newNums.append(start + mid + end)

        i += 1

    return newNums

joinConsecutive(mylist)

[['0705', '66', '06755', '04'],
 ['07', '0566', '06755', '04'],
 ['07', '05', '6606755', '04'],
 ['07', '05', '66', '0675504']]


Tags: and列表startendpartslastjoinmid
3条回答
def joinConsecutive(mylist):
    output=[]
    for i,val in enumerate(mylist[:-1]):
        newlist=mylist.copy()
        newlist[i]=val+newlist.pop(i+1)
        output.append(newlist)
    return(output)
joinConsecutive(mylist)
[['0705', '66', '06755', '04'],
 ['07', '0566', '06755', '04'],
 ['07', '05', '6606755', '04'],
 ['07', '05', '66', '0675504']]

我认为您的方法很好(切片从不产生IndexError,而是返回空列表)。你知道吗

但是,可以通过使用try/except和enumerate提高可读性:

def join_consecutive_values(mylist):
    result = []
    for i, value in enumerate(mylist): 
        try: 
            merged_value = value + mylist[i+1] 
        except IndexError:  # we're done!
            break 
        new_list = mylist[:i] + [merged_value] + mylist[i+2:] 
        result.append(new_list) 
   return result              

使用一些索引数学和嵌套列表:

>>> [mylist[:i] + [mylist[i]+mylist[i+1]] + mylist[i+2:] for i in range(len(mylist)-1)]
[['0705', '66', '06755', '04'], ['07', '0566', '06755', '04'], ['07', '05', '6606755', '04'], ['07', '05', '66', '0675504']]

不要担心“切片问题”,因为Python会自动为您处理超出范围的切片索引(通过返回空列表)。你知道吗

相关问题 更多 >

    热门问题