python - 清单切割清单
问题描述
给定一个限制和一个包含任意数量项目的列表列表,我想剪切列表列表,其中限制是所有列表中的项目总数。
到目前为止我的努力:
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']]
谁能帮我完成这项工作?谢谢!
解决方案
使其工作的最小更改:
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
推荐阅读
- javascript - 将变量从 html 传递给 python
- python - 读取输入字符串并声明具有相同字符串名称的变量以在python中为其赋值
- ios - 在 tableView swift 的基础上拥有由谷歌文本提供支持
- r - 如何在 r 控制台的条件下打印出多个语句?
- ios - UITableViewCell 中的 UITextField 错误
- bpmn - Signal 在 BPMN 中可以有零个收件人吗?
- c# - WCF 服务未通过 https 从邮递员处命中
- python - 如何克服这个警告 -> RemovedInDjango110Warning: Operator '=' is deprecated and will be removed in Django 1.10. 改用'=='
- reactjs - 如何在 react-wavesurfer for reactJS 中处理多个音频文件实例?
- node.js - 如何使用 Node.js 在 Alexa 中说新闻