我有一个这样的清单:
A = [[2, 3], 5, 7, 8, [2, 3], 1, [9, 2]]
我想比较嵌套列表中的所有值([2,3],...,[2,3],...,[9,2])并提取出现一次的数字,这种情况9,如果您找到一个仅出现在列表中的一个列表中的数字。这就是那个区块的答案,即:
A = [[2, 3], 5, 7, 8, [2, 3], 1, [9]]
答案 0 :(得分:1)
凌乱,难以阅读列表理解,但其他答案这么久!
如果列表成员是整数,或者如果它是仅在所有子列表的组合列表中出现多次成员的子列表,则包括该列表成员。否则,也就是说,如果它是一个子列表,其成员在所有子列表中都是唯一的,则只包括该子列表的唯一成员。
>>> A = [[2, 3], 5, 7, 8, [2, 3], 1, [9, 2]]
>>> L = [y for x in A if type(x) == list for y in x]
>>>> [x if (type(x) == int) else x if all([L.count(y) > 1 for y in x]) \
else [y for y in x if L.count(y) == 1] for x in A]
[[2, 3], 5, 7, 8, [2, 3], 1, [9]]
答案 1 :(得分:0)
如果要提取仅出现在一个子列表中的值,无论它们出现在该子列表中的次数,您都可以这样做:
from collections import Counter
def get_answer(x):
my_list = []
for ele in x:
if isinstance(ele, list):
my_list.extend(list(set(ele)))
countz = Counter(my_list)
return [k for k,v in countz.iteritems() if v == 1]
结果:
>>> get_answer([[2, 3], 5, 7, 8, [2, 3], 1, [9, 9]])
[9]
>>> get_answer([[2, 3], 5, 7, 8, [2, 3], 1, [9, 2]])
[9]
如果您想要提取仅出现在一个子列表中且在该子列表中只出现一次的数字,即它只在所有子列表的所有元素中显示一次,您将更改 这一行:
my_list.extend(list(set(ele)))
到
my_list.extend(ele)
答案 2 :(得分:0)
这是你想要的吗?
import collections
A = [[2, 3], 5, 7, 8, [2, 3], 1, [9, 2]]
B = []
occurences = collections.defaultdict(lambda: 0)
for element in A:
if type(element) is list:
B.append(element)
for sublist in B:
for number in sublist:
occurences[number] += 1
for sublist in B:
for number in sublist:
if occurences[number] == 1:
del sublist[:]
sublist.append(number)
print(A)
结果:
[[2, 3], 5, 7, 8, [2, 3], 1, [9]]