我已经创建了一个功能来组合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);
}
答案 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