我有一个字符串列表,如下所示:
['(num1, num2):1', '(num3, num4):1', '(num5, num6):1', '(num7, num8):1']
我试图实现的是减少这个列表并合并每两个元素,我想这样做,直到只剩下一个大字符串元素。 所以中间列表如下所示:
['((num1, num2):1,(num3, num4):1)', '((num5, num6):1,(num7, num8):1)']
复杂的事情是(正如您在中间列表中看到的那样),两个字符串需要用paranethesis包装。因此,对于上述起点,最终结果应如下所示:
(((num_1,num_2):1,(num_3,num_4):1),((num_5,num_6):1,(num_7,num_8):1))
当然,对于起始列表中的8个、16个或更多的字符串元素,这也应该是通用的。或者更准确地说,它应该适用于an=2(n+1)
。你知道吗
非常具体地说,8个元素的结果应该是什么样的:
'((((num_1,num_2):1,(num_3,num_4):1),((num_5,num_6):1,(num_7,num_8):1)),(((num_9,num_10):1,(num_11,num_12):1),((num_13,num_14):1,(num_15,num_16):1)))'
我已经用嵌套for循环解决了这个问题,但我认为应该有一个更实用或更快捷的解决方案。你知道吗
我还在stackoverflow上找到了this solution:
import itertools as it
l = [map( ",".join ,list(it.combinations(my_list, l))) for l in range(1,len(my_list)+1)]
虽然,加入还不错,但我还是需要论文。我试着用:
"{},{}".format
而不是.join
,但这似乎很容易工作:)。你知道吗
我也想过使用reduce,但显然这不是正确的函数。或许可以实现一个自己的reduce函数?你知道吗
我希望一些先进的Python可以帮助我。你知道吗
听起来像是针对
zip
集群习惯用法的工作:zip(*[iter(x)]*n)
,在这里您想要将iterablex
分解成大小n
块。这将丢弃不构成完整块的“剩余”元素。对于x=[1, 2, 3]
,n=2
这将产生(1, 2)
这是对
zip(*[iter(l)]*2)
发生的事情的解释[iter(l)*2]
这将创建一个长度为2的列表,其中包含两倍于同一iterable元素的元素,或者更精确地说,包含对同一iter对象的两个引用。你知道吗zip(*...)
执行提取。它吸引:回路
回路
回路
等等。。。你知道吗
因此,我们在for循环中有提取的元素,可以将它们用作
x
和y
进行进一步处理。你知道吗这真的很方便。你知道吗
我还想指出this thread,因为它帮助我理解了这个概念。你知道吗
相关问题 更多 >
编程相关推荐