使用列表和复制时,您应该了解浅拷贝和深拷贝的区别,否则您只会复制列表的引用-而不是它的值。在此处了解更多:
Python中的列表深拷贝
计算需要多少个重复很容易,计算模式中1的数量,将字符串长度除以这个数量并加上
1
(使用mod检查是否有余数)。
深度复制一个足够长的结果列表,并开始用字符替换“1”。
from itertools import chain
import copy
def createArr(t:str,arr:list):
"""Puts each character of t on the 1s of arr, extends arr with itself as pattern"""
ones = sum(1 if q==1 else 0 for n in arr for q in n)
mult = len(t)//ones
if len(t)%ones != 0:
mult += 1
rv = list(chain(*(copy.deepcopy(arr) for _ in range(mult))))
subidx = 0
for c in t:
while 1 not in rv[subidx] and subidx<len(rv):
subidx+=1
sub = rv[subidx]
sub[sub.index(1)] = c
return rv
text = "helloworldddd"
my_array = [ [0,1,1],[1,1,0],[1,0,0] ]
print(createArr(text,my_array))
输出:
[[0, 'h', 'e'], ['l', 'l', 0], ['o', 0, 0],
[0, 'w', 'o'], ['r', 'l', 0], ['d', 0, 0],
[0, 'd', 'd'], ['d', 1, 0], [1, 0, 0]]
如果需要,您可以将其分成相等的部分,使用arr的长度进行分区。这些高排名的问题和它们的答案将告诉你如何操作:如何将列表分成平均大小的块?