有没有更好的方法来组合python列表中的多个项目

时间:2016-05-19 21:43:04

标签: python

我已经创建了一个功能来组合python列表中的特定项目,但我怀疑有一种更好的方法,即使极端谷歌搜索我也找不到。我需要快速编写代码,因为我将会这样做数千次。

mergeleft 获取项目列表和索引列表。在下面的示例中,我将其称为mergeleft(字段,(2,4,5))。列表字段的第5,第4和第2项将立即连接到左侧的项目。在这种情况下, 3 d 会连接到 c ; b 会加入 a 。结果是一个列表(' ab',' cd3',' f')。

using (var scope = DialogModule.BeginLifetimeScope(Conversation.Container, message))
{
     var client = scope.Resolve<IConnectorClient>();
     client.Messages.SendMessage(message);
}

2 个答案:

答案 0 :(得分:2)

fields = ['a','b','c','d', 3,'f']

这假定以单调升序排列的索引列表。 我颠倒了顺序,以便我从右向左合并。 对于每个给定的索引,我将该元素合并到左侧的那个元素中,在每个点处转换为字符串。 请注意,我已将 fieldnums 类型更改为列表,以便它可以轻松转换。您也可以按相反的顺序遍历元组。

def mergeleft(lst, fieldnums):
    fieldnums.reverse()
    for pos in fieldnums:
        # Merge this field left
        lst[pos-2] = str(lst[pos-2]) + str(lst[pos-1])
        lst = lst[:pos-1] + lst[pos:]

    return lst

print(mergeleft(fields,[2,4,5]))

输出:

['ab', 'cd3', 'f']

答案 1 :(得分:0)

这是一个非常简洁的解决方案,可能在很多人中间。

def mergeleft(x, fieldnums):
    if 1 in fieldnums: raise Exception('Cannot merge field 1 left')
    if max(fieldnums) > len(x): raise IndexError('Fieldnum {} exceeds available fields {}'.format(max(fieldnums),len(x)))
    ret = list(x)
    for i in reversed(sorted(set(fieldnums))):
        ret[i-1] = str(ret[i-1]) + str(ret.pop(i))
    return ret