Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
集合不返回字母数字元组列表中的唯一元素-为什么?(Python 3.6)_Python_Python 3.x_Dataframe_Set_Combinations - Fatal编程技术网

集合不返回字母数字元组列表中的唯一元素-为什么?(Python 3.6)

集合不返回字母数字元组列表中的唯一元素-为什么?(Python 3.6),python,python-3.x,dataframe,set,combinations,Python,Python 3.x,Dataframe,Set,Combinations,我正在从高于某个值的pd.DataFrame中提取有关单元格的数据。我将索引、列标题和值存储在一个元组中。然后将这些元组附加到列表中。我从中获取值的数据帧的布局意味着我提取每个元素两次,并且只需要存储每个组合一次。通过阅读之前的文章,集合(列表)应该给出这些独特的元素,但在模拟数据集上,它应该产生单一结果('Pathway1','Pathway2',0.6),它报告了两种排列 有人知道为什么在这种情况下set不起作用吗?我知道列表必须是相同的,而且在我看来它们是相同的(甚至包括每个元组组件的类型

我正在从高于某个值的pd.DataFrame中提取有关单元格的数据。我将索引、列标题和值存储在一个元组中。然后将这些元组附加到列表中。我从中获取值的数据帧的布局意味着我提取每个元素两次,并且只需要存储每个组合一次。通过阅读之前的文章,集合(列表)应该给出这些独特的元素,但在模拟数据集上,它应该产生单一结果('Pathway1','Pathway2',0.6),它报告了两种排列

有人知道为什么在这种情况下set不起作用吗?我知道列表必须是相同的,而且在我看来它们是相同的(甚至包括每个元组组件的类型(string、string、float))。出于绝望,我尝试将浮点值强制为字符串,但没有任何改进

为了完整起见,给出了大部分代码(简化了一点)。底部的块是问题出现的地方。代码如下:


问题在于:

for k in range(len(slist)):
    index = dataframe.index[dataframe.iloc[k]>x]
    for l in range(len(index)):
        if index[l] != dataframe.columns[k]:
            temp.append((index[l], dataframe.columns[k], dataframe.iloc[l,k]))
print(set(temp))
我从打印
temp
得到的输出是

{('Pathway1', 'Pathway2', 0.6), ('Pathway2', 'Pathway1', 0.6)}
但我要求(以任何顺序):

谢谢你能提供的帮助


Angus

问题在于元组是有序的,因此
('Pathway1','Pathway2',0.6)
不等于
('Pathway2','Pathway1',0.6)

要解决此问题,请将
temp
初始化为
set
,并在添加到元组之前对任何元组进行排序

temp = set()
for ...:
    ...
    the_tuple = ...
    temp.add(tuple(sorted(the_tuple)))
print(temp)

pathway\u review
是一个附加集合的列表。它是如何突然变成一组元组的?我将删除它,因为它无助于澄清问题,而且鉴于试验数据集,它没有任何用途。当我在这里谈论输出时,我指的是打印(set(temp)),不清楚您是否注意到
('Pathway1','Pathway2',0.6)
('Pathway2','Pathway1',0.6)
是完全不同的元组;一个前面有
'Pathway1'
,另一个在第二个。谢谢,这方面的一个变化已经起作用:temp=[]表示范围内的k(len(slist)):index=dataframe.index[dataframe.iloc[k]>x]表示范围内的l(len(index)):if index[l]!=dataframe.columns[k]:未排序的列=[index[l],dataframe.columns[k],str(dataframe.iloc[l,k])]已排序的列=已排序的(未排序的列)temp.append(tuple(sorted_list))print(set(temp)),正如人们指出的,关键是元组是有序的
('Pathway1', 'Pathway2', 0.6) 
temp = set()
for ...:
    ...
    the_tuple = ...
    temp.add(tuple(sorted(the_tuple)))
print(temp)