阵列除了其它
回答
所以,你要两个列表的区别:
list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
list2 = [1, 2, 3, 4, 4, 6, 7, 8, 11, 77]
def list_difference(list1, list2):
"""uses list1 as the reference, returns list of items not in list2"""
diff_list = []
for item in list1:
if not item in list2:
diff_list.append(item)
return diff_list
print list_difference(list1, list2) # [5, 9, 10]
或者使用列表理解:
# simpler using list comprehension
diff_list = [item for item in list1 if item not in list2]
print diff_list # [5, 9, 10]
更漂亮:“如果项目不在列表2中”。 +1为理解。 – 2011-04-11 09:47:59
谢谢,修正:-) – Flavius 2011-04-11 09:54:29
数学上来说,你正在寻找清单表示的两组之间的差异。那么如何使用Python set
,它有一个内置的差异操作(在-
操作符上超载)?
>>>
>>> arr = [1, 2, 3, 4, 5]
>>> arr2 = [3, 4, 9]
>>> set(arr) - set(arr2)
>>> sdiff = set(arr) - set(arr2)
>>> sdiff
set([1, 2, 5])
>>> list(sdiff)
[1, 2, 5]
>>>
虽然,首先将您的信息放在set
的位置会更方便。此操作表明set
更适合您的应用程序语义,而不是list
。另一方面,如果列表中可能有重复项,则set
不是一个好的解决方案。
如果您关心的是(1)保留项目出现的顺序,(2)您的列表很大时的效率,您可能需要混合使用已经提出的两种解决方案。
list2_items = set(list2)
[x for x in list1 if x not in list2_items]
(均转换为集将失去排序。在列表解析使用if x not in list2
会给你实际上在这两个列表中的迭代器,这将是低效的,如果list2
大。)
如果您知道list2
不是很长,也不需要保存所有可能的微秒,所以你应该使用Flavius提出的简单列表理解:简短,简单,并且确切地说明了你的意思。
大输入,+1 – Flavius 2011-04-11 10:00:24
- 1. 除去父阵列和配对了其内阵列这里值
- 2. 通过从其它阵列
- 3. 与值从其它阵列
- 4. 夫特3阵列 - 删除的多个元素与其它阵列的帮助
- 5. 寻找其示出了在bash阵列
- 6. 查找其它阵列内部的阵列与lodash
- 7. PHP得到阵列值,并使用它的其他阵列
- 8. 从阵列比较它的其他阵列
- 9. 如何筛选的阵列,以对应其它阵列
- 10. 问题在Java分配的阵列,以其它阵列
- 11. 主义的MySQL,检查阵列中的其它阵列
- 12. 取出钥匙在其它阵列
- 13. PHP合并每个其它阵列
- 14. 如何从其它类修改阵列
- 15. 如何在其它两个阵列
- 16. 逗号阵列上,除了通过PHP
- 17. FETCH_ASSOC错误的删除了阵列
- 18. 了解阵列删除功能
- 19. 删除值它们在阵列
- 20. 了解阵列
- 21. 红宝石矩阵除了多维阵列
- 22. 排序PHP数组它在其它阵列exsit
- 23. /加入了阵列
- 24. AS3/CS6:补间动画片段阵列:它们都停止,除了1
- 25. 删除阵列
- 26. 删除阵列
- 27. 除了np以外,Scipy标签阵列的索引计算更快。其中
- 28. 删除阵列的所有项目除了最后5
- 29. 除了在矩阵用C++
- 30. 处理阵列它
Plz be clear您是否想从arr1中删除arr2的对象 – 2011-04-11 09:47:11
您可能正在讨论**列表**。数组是其他东西:http://docs.python.org/library/array.html – 2011-04-11 09:52:39