我有一个列表,其中的项目是可变长度的列表
如果这些可变长度的列表项超过此长度,则需要将其截断为特定长度(x)
我做了一个小函数来实现它
def truncateList(batch_, trim_len):
truncated_list = []
for eachAbstract in train_abstracts_encoded:
if len(eachAbstract) > trim_len:
del eachAbstract[trim_len:]
truncated_list.append(eachAbstract)
else:
truncated_list.append(eachAbstract)
return truncated_list
然而,我可以用一行代码,用一种更像Python的方式来做吗
像这样:
prefData = [ del eachEncodedAbstract[MAX_LEN:] if len(eachEncodedAbstract) > 510 else eachEncodedAbstract for eachEncodedAbstract in test_abstracts_encoded]
但这不起作用,我犯了错误
prefData = [ del eachEncodedAbstract[MAX_LEN:] if len(eachEncodedAbstract) > 510 else eachEncodedAbstract for eachEncodedAbstract in test_abstracts_encoded]
^
SyntaxError: invalid syntax
任何帮助都将不胜感激
如果您不想修改
eachAbstract
对象,而只是获得一个修剪过的版本,则可以使用以下方法:请注意,这与使用
del
的版本不同,因为它不修改对象您仍然可以通过将公共部分移出
if/else
分支来简化您的版本:但是,由于您正在原地修改对象,您只需创建原始列表的副本,然后在其上循环(这将稍微快一些,因为
copy()
避免了对append
的重复调用,从而避免了内部调整大小):这里
train_abstracts_encoded
和truncated_list
共享相同的对象您可能需要
eachEncodedAbstract[:MAX_LEN]
Ex:
相关问题 更多 >
编程相关推荐