列表<script>
function test(A) {
var B = new Array();
for(var i=0; i<A.length; i++) {
B[i] = function value() {
return A[i];
};
}
for(var i=0; i< B.length; i++) {
console.log(B[i].value());
}
return B;
}
A=[1,2,3];
B = test(A);
</script>
应该变为['a','a #2','a(Old)']
,因为要删除{'a'}
和'#'
,并且不需要重复列表。我努力用发电机开发一个列表理解并坚持这个,因为我知道它的工作和重视时间而不是看起来很好:
'(Old)'
获得此结果的方法是什么?
答案 0 :(得分:1)
您可以在单个集合理解中编写整个表达式
>>> groups = ['a','a #2','a(Old)']
>>> {i.split('#')[0].split('(Old)')[0].strip() for i in groups}
{'a'}
这将获得#
之前的所有内容以及'(Old)'
之前的所有内容,然后修剪空格。余数放在一个集合中,只保留唯一值。
答案 1 :(得分:0)
如果您想从lst
中的部分清除列表wastes
的元素,这是一般解决方案:
lst = ['a','a #2','a(Old)']
wastes = ['#', '(Old)']
cleaned_set = {
min([element.split(waste)[0].strip() for waste in wastes])
for element in arr
}
答案 2 :(得分:0)
您可以定义一个辅助函数来应用所有拆分,然后使用集合理解。
例如:
lst = ['a','a #2','a(Old)', 'b', 'b #', 'b(New)']
splits = {'#', '(Old)', '(New)'}
def split_all(a):
for s in splits:
a = a.split(s)[0]
return a.strip()
groups = {split_all(a) for a in lst}
#{'a', 'b'}