Python返回唯一的元素组合
如果我有这样一个列表:Python返回唯一的元素组合,python,Python,如果我有这样一个列表: ls = [['water', 'chips', 'pie'], ['soda', 'nuts', 'cake'], ['water', 'chips', 'cake']] 比如说,这份名单分为“饮料”、“零食”和“沙漠”三类。我想返回“饮料”和“零食”的所有独特元素组合。列表应返回以下内容: ls = [['water', 'chips'], ['soda', 'nuts']] 它不会返回第三个列表,因为water和chips已经存在于ls中的另一个列表中 您似乎希
ls = [['water', 'chips', 'pie'], ['soda', 'nuts', 'cake'], ['water', 'chips', 'cake']]
比如说,这份名单分为“饮料”、“零食”和“沙漠”三类。我想返回“饮料”和“零食”的所有独特元素组合。列表应返回以下内容:
ls = [['water', 'chips'], ['soda', 'nuts']]
它不会返回第三个列表,因为
water
和chips
已经存在于ls
中的另一个列表中 您似乎希望每个列表都有唯一的值。您已经完成了一半,因为在unqBuilding
中有一组所有唯一的值
unique_per_row = [list(set(r).difference(unqBuilding))
for r in row]
上面将生成一个列表,其中每行中的项目列表仅显示在该行中
一个集合的difference
方法获取另一个集合,并返回一个新集合,其中的项目仅出现在第一个集合中。用维恩图更容易理解。在下图中,right.difference(left)
的等效项以红色突出显示
您似乎希望每个列表具有唯一的值。您已经完成了一半,因为在
unqBuilding
中有一组所有唯一的值
unique_per_row = [list(set(r).difference(unqBuilding))
for r in row]
上面将生成一个列表,其中每行中的项目列表仅显示在该行中
一个集合的difference
方法获取另一个集合,并返回一个新集合,其中的项目仅出现在第一个集合中。用维恩图更容易理解。在下图中,right.difference(left)
的等效项以红色突出显示
您似乎希望每个列表具有唯一的值。您已经完成了一半,因为在
unqBuilding
中有一组所有唯一的值
unique_per_row = [list(set(r).difference(unqBuilding))
for r in row]
上面将生成一个列表,其中每行中的项目列表仅显示在该行中
一个集合的difference
方法获取另一个集合,并返回一个新集合,其中的项目仅出现在第一个集合中。用维恩图更容易理解。在下图中,right.difference(left)
的等效项以红色突出显示
您似乎希望每个列表具有唯一的值。您已经完成了一半,因为在
unqBuilding
中有一组所有唯一的值
unique_per_row = [list(set(r).difference(unqBuilding))
for r in row]
上面将生成一个列表,其中每行中的项目列表仅显示在该行中
一个集合的difference
方法获取另一个集合,并返回一个新集合,其中的项目仅出现在第一个集合中。用维恩图更容易理解。在下图中,right.difference(left)
的等效项以红色突出显示
pos0和pos1必须是函数的变量,以及列表本身,但您知道这一点
pos0 = 0
pos1 = 2
ls = [['water', 'chips', 'pie'], ['soda', 'nuts', 'cake'], ['water', 'chips', 'cake']]
s = set()
for row in ls:
#cant hash a list, tuple it
tu = (row[pos0], row[pos1])
s.add(tu)
#untuple the set's contents back to lists
print [list(tu) for tu in s]
输出:位置0,1
[['soda', 'nuts'], ['water', 'chips']]
位置0,2
[['soda', 'cake'], ['water', 'cake'], ['water', 'pie']]
pos0和pos1必须是函数的变量,以及列表本身,但您知道这一点
pos0 = 0
pos1 = 2
ls = [['water', 'chips', 'pie'], ['soda', 'nuts', 'cake'], ['water', 'chips', 'cake']]
s = set()
for row in ls:
#cant hash a list, tuple it
tu = (row[pos0], row[pos1])
s.add(tu)
#untuple the set's contents back to lists
print [list(tu) for tu in s]
输出:位置0,1
[['soda', 'nuts'], ['water', 'chips']]
位置0,2
[['soda', 'cake'], ['water', 'cake'], ['water', 'pie']]
pos0和pos1必须是函数的变量,以及列表本身,但您知道这一点
pos0 = 0
pos1 = 2
ls = [['water', 'chips', 'pie'], ['soda', 'nuts', 'cake'], ['water', 'chips', 'cake']]
s = set()
for row in ls:
#cant hash a list, tuple it
tu = (row[pos0], row[pos1])
s.add(tu)
#untuple the set's contents back to lists
print [list(tu) for tu in s]
输出:位置0,1
[['soda', 'nuts'], ['water', 'chips']]
位置0,2
[['soda', 'cake'], ['water', 'cake'], ['water', 'pie']]
pos0和pos1必须是函数的变量,以及列表本身,但您知道这一点
pos0 = 0
pos1 = 2
ls = [['water', 'chips', 'pie'], ['soda', 'nuts', 'cake'], ['water', 'chips', 'cake']]
s = set()
for row in ls:
#cant hash a list, tuple it
tu = (row[pos0], row[pos1])
s.add(tu)
#untuple the set's contents back to lists
print [list(tu) for tu in s]
输出:位置0,1
[['soda', 'nuts'], ['water', 'chips']]
位置0,2
[['soda', 'cake'], ['water', 'cake'], ['water', 'pie']]
您可以执行以下操作:
>>> ls = [['water', 'chips', 'pie'], ['soda', 'nuts', 'cake'], ['water', 'chips', 'cake']]
>>> item_position = { "drink": 0,
"snack": 1,
"desert": 2}
>>> set((x[item_position['drink']], x[item_position['snack']]) for x in ls)
{('soda', 'nuts'), ('water', 'chips')}
在这里,我创建了一个item\u position
dict,它给出了食物类型在内部列表中的位置。
然后,我在这里创建一个必需项的元组,即饮料
和零食
,并应用set
操作符过滤重复项
这样做的好处是,您可以只传入项类型名称,而不必担心其索引。您还可以在准备元组时更改要使用的内部列表的项数。您可以执行以下操作:
>>> ls = [['water', 'chips', 'pie'], ['soda', 'nuts', 'cake'], ['water', 'chips', 'cake']]
>>> item_position = { "drink": 0,
"snack": 1,
"desert": 2}
>>> set((x[item_position['drink']], x[item_position['snack']]) for x in ls)
{('soda', 'nuts'), ('water', 'chips')}
在这里,我创建了一个item\u position
dict,它给出了食物类型在内部列表中的位置。
然后,我在这里创建一个必需项的元组,即饮料
和零食
,并应用set
操作符过滤重复项
这样做的好处是,您可以只传入项类型名称,而不必担心其索引。您还可以在准备元组时更改要使用的内部列表的项数。您可以执行以下操作:
>>> ls = [['water', 'chips', 'pie'], ['soda', 'nuts', 'cake'], ['water', 'chips', 'cake']]
>>> item_position = { "drink": 0,
"snack": 1,
"desert": 2}
>>> set((x[item_position['drink']], x[item_position['snack']]) for x in ls)
{('soda', 'nuts'), ('water', 'chips')}
在这里,我创建了一个item\u position
dict,它给出了食物类型在内部列表中的位置。
然后,我在这里创建一个必需项的元组,即饮料
和零食
,并应用set
操作符过滤重复项
这样做的好处是,您可以只传入项类型名称,而不必担心其索引。您还可以在准备元组时更改要使用的内部列表的项数。您可以执行以下操作:
>>> ls = [['water', 'chips', 'pie'], ['soda', 'nuts', 'cake'], ['water', 'chips', 'cake']]
>>> item_position = { "drink": 0,
"snack": 1,
"desert": 2}
>>> set((x[item_position['drink']], x[item_position['snack']]) for x in ls)
{('soda', 'nuts'), ('water', 'chips')}
在这里,我创建了一个item\u position
dict,它给出了食物类型在内部列表中的位置。
然后,我在这里创建一个必需项的元组,即饮料
和零食
,并应用set
操作符过滤重复项
这样做的好处是,您可以只传入项类型名称,而不必担心其索引。此外,您还可以在准备元组时更改要使用的内部列表中的项数。添加一些输入、预期输出以及数据和行是什么提供一个数据示例您的意思是通过每行中的值进行循环?是否使用嵌套循环?请参见上面的编辑。希望澄清。逻辑是什么?您如何解释导致我们获得您提供的结果的过程?添加一些输入、预期输出以及哪些数据和行提供您的数据样本您指的是通过每行中的值的循环?是否使用嵌套循环?请参见上面的编辑。希望澄清。逻辑是什么?您如何解释导致我们获得您提供的结果的过程?添加一些输入、预期输出以及提供示例的数据和行