Python 查找列表中重复浮点数的索引
我有一个非常大的浮点数列表的输入,给出了一个示例Python 查找列表中重复浮点数的索引,python,linux,duplicates,Python,Linux,Duplicates,我有一个非常大的浮点数列表的输入,给出了一个示例 [1.2, 2.4, 3.1, 4.0, 5.6, 6.5, 1.2, 3.1, 8.1, 23.6, 29.3] 我想找到所有副本及其索引,即列表中的位置。重复项只会成对出现;不要超过两次 输出应该是 1.2 1 7 3.1 3 8 所以只有两个条目1.2和3.1是重复的,它们的位置分别是1,7和3,8 对python有什么建议吗?您可以尝试以下方法: x = [1.2, 2.4, 3.1, 4.0, 5.6, 6.5, 1.2, 3.
[1.2, 2.4, 3.1, 4.0, 5.6, 6.5, 1.2, 3.1, 8.1, 23.6, 29.3]
我想找到所有副本及其索引,即列表中的位置。重复项只会成对出现;不要超过两次
输出应该是
1.2 1 7
3.1 3 8
所以只有两个条目1.2和3.1是重复的,它们的位置分别是1,7和3,8
对python有什么建议吗?您可以尝试以下方法:
x = [1.2, 2.4, 3.1, 4.0, 5.6, 6.5, 1.2, 3.1, 8.1, 23.6, 29.3]
for el in set(x):
if x.count(el) > 1:
print el, x.count(el), len(x) - x[::-1].index(el)
输出(具有重复项的元素、数量、上次出现的索引):
把习近平的回答再进一步。通过添加列表,它将提供包含该值的所有索引的列表
x = [1.2, 2.4, 3.1, 4.0, 5.6, 6.5, 1.2, 3.1, 8.1, 23.6, 29.3]
for el in set(x):
if x.count(el) > 1:
print el, " ".join([str(index) for index, value in enumerate(x) if value == el])
您将获得以下输出:(基于0的索引)
编辑
解释[str(index)表示索引,如果值==el,则枚举(x)中的值]
这是枚举x
,它创建列表的枚举对象,该对象将返回(,)
然后,它使用enumerate(x)中的索引值来循环遍历这个enumerate对象
if value==el
检查每个值
,如果它等于el
,则我们进行评估,否则我们什么也不做
str(index)
是根据我们上面定义的条件进行评估的部分。它返回索引的字符串版本
,这是一种整数类型
这将提供一个列表(介于[
和]
之间的所有代码),然后将该列表传递给字符串方法join(list)
,该方法将列表中的所有项与“
中的值连接起来(在本例中,它可以是任何字符串)从创建的列表中提供一个以空格分隔的值字符串
我还假设您以后甚至可能需要这些数据,而不仅仅是打印数据。这里有一个版本可以做到这一点。这将创建一个空字典y={}
,然后我们使用值(el
)键创建一个新条目,为其提供一个索引列表
x = [1.2, 2.4, 3.1, 4.0, 5.6, 6.5, 1.2, 3.1, 8.1, 23.6, 29.3]
y = {}
for el in set(x):
if x.count(el) > 1:
y[el] = [str(index) for index, value in enumerate(x) if value == el]
如果执行打印y
,则应得到以下结果:
{3.1: ['2', '7'], 1.2: ['0', '6']}
Edit2
打印y
,使其与指定的输出匹配。这样做:
print "\n".join(["{} {}".format(key, " ".join(vals)) for key, vals in y.iteritems()])
输出:
3.1 2 7
1.2 0 6
1.2 0 6
3.1 2 7
这是在使用(for key,vals in y.iteritems()
)遍历字典y
,生成一个字符串”
,使用:(“{}{}”。format(key,“.join(vals))
)返回一个字符串列表,因此我们使用“\n”
将它们连接到每一行
现在需要注意的是,由于字典是一个散列,所以不会对键的输出顺序进行排序。如果要这样做,可以将上面的代码更改为:
print "\n".join(["{} {}".format(key, " ".join(y[key])) for key in sorted(y.keys())])
输出:
3.1 2 7
1.2 0 6
1.2 0 6
3.1 2 7
这是多么疯狂的语法啊?你确定那是python吗?@xi_u这是scala的,输入来自另一个软件@xi_uu~您也可以建议使用python或linux。。对于linux,这将只是一个操作系统。我们已经知道会有2次出现,但是,出现的索引很重要@你需要所有的索引吗?是的,我需要所有的索引来查看某个值在哪个位置重复!您是否可以解释一下您的代码,以便我以后可以出于不同的目的对其进行修改?最后一行在连接后我不清楚为什么输出的形式是[(0.11004363790442408,'0 22'),(1.000330378789184,'1 7'),(0.942725665065468,'15 23')?为什么不使用逗号等?输出的形式是带有逗号的,因为它打印的是数据类型的标准表示形式。如果您希望输出看起来“漂亮”,那么您必须迭代并打印。我现在已经在答案中包括了这一点。