给出一个限制和一个包含任意数量项目的列表列表,我想剪切列表列表,其中限制为所有列表中项目的总数。
到目前为止,我的努力:
lol = [['a', 'v', '1', 'r'], ['d', 'x', 'b'], ['s', '0', 'u', 'x']]
def cut_lol(lol, n):
count = 0
result = []
for l in lol:
if count + len(l) > (n):
new_len_l = count + len(l) - n
result.append(l[:new_len_l])
return result
result.append(l)
count += len(l)
return result
但是此功能有问题,我看不到什么。
例如:
print(cut_lol(lol, 8))
# returns [['a', 'v', '1', 'r'], ['d', 'x', 'b'], ['s', '0', 'u']]
# should be: [['a', 'v', '1', 'r'], ['d', 'x', 'b'], ['s']]
print(cut_lol(lol, 4))
# returns [['a', 'v', '1', 'r'], ['d', 'x', 'b']]
# should be: [['a', 'v', '1', 'r']]
print(cut_lol(lol, 3))
# returns [['a']]
# should be: [['a', 'v', '1']]
有人可以帮助我完成这项工作吗?谢谢!
答案 0 :(得分:3)
进行最小的更改以使其起作用:
lol = [['a', 'v', '1', 'r'], ['d', 'x', 'b'], ['s', '0', 'u', 'x']]
def cut_lol(lol, n):
count = 0
result = []
for l in lol:
if count + len(l) > (n):
new_len_l = n - count
if new_len_l:
result.append(l[:new_len_l])
return result
result.append(l)
count += len(l)
return result
简化版:
lol = [['a', 'v', '1', 'r'], ['d', 'x', 'b'], ['s', '0', 'u', 'x']]
def cut_lol(lol, n):
count = 0
result = []
for l in lol:
to_read = n - count
if to_read <= 0:
break
result.append(l[:to_read])
count += len(l)
return result
答案 1 :(得分:2)
我们可以通过for
循环和有条件的返回来完成此操作:
def cut_lol(lol, n):
result = []
for li in lol:
if n <= 0:
return result
sli = li[:n]
result.append(sli)
n -= len(sli)
return result
因此,这里我们遍历li
中的子列表lol
。每次我们检查元素n
的剩余数量是否已经达到零时,在这种情况下,我们将返回到目前为止获得的结果。否则,我们将附加一个子列表的切片版本,使其最多包含n
个元素。我们每次减少数字。
我们可以通过以下条件来提高效率:
def cut_lol(lol, n):
result = []
for li in lol:
if n <= 0:
return result
sli = li
if len(sli) > n:
sli = sli[:n]
result.append(sli)
n -= len(sli)
return result
示例输出:
>>> cut_lol(lol, 0)
[]
>>> cut_lol(lol, 1)
[['a']]
>>> cut_lol(lol, 2)
[['a', 'v']]
>>> cut_lol(lol, 3)
[['a', 'v', '1']]
>>> cut_lol(lol, 4)
[['a', 'v', '1', 'r']]
>>> cut_lol(lol, 5)
[['a', 'v', '1', 'r'], ['d']]
>>> cut_lol(lol, 6)
[['a', 'v', '1', 'r'], ['d', 'x']]
>>> cut_lol(lol, 7)
[['a', 'v', '1', 'r'], ['d', 'x', 'b']]
>>> cut_lol(lol, 8)
[['a', 'v', '1', 'r'], ['d', 'x', 'b'], ['s']]
这也适用于元组和其他可切片对象(在这种情况下,结果将是这些已切片对象的列表)。