Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.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 查找列表中重复浮点数的索引_Python_Linux_Duplicates - Fatal编程技术网

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')?为什么不使用逗号等?输出的形式是带有逗号的,因为它打印的是数据类型的标准表示形式。如果您希望输出看起来“漂亮”,那么您必须迭代并打印。我现在已经在答案中包括了这一点。