Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.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 - Fatal编程技术网

Python 找出两个值之间的差异?

Python 找出两个值之间的差异?,python,Python,我有一个随机数据集,我想知道是否有可能找到所有的点集,它们之间的差值大于某个常数。只要对应值之间的差值大于该常数,点是否不连续并不重要 是的,这是可能的。 应该是这样的: sets = [] for item1 in dataset: for item2 in dataset: if abs(item1 - item2) > somevalue): sets.append((item1, item2)) 您创建一个集合列表,该列表将保存绝对

我有一个随机数据集,我想知道是否有可能找到所有的点集,它们之间的差值大于某个常数。只要对应值之间的差值大于该常数,点是否不连续并不重要

是的,这是可能的。 应该是这样的:

sets = []
for item1 in dataset:
    for item2 in dataset:
        if abs(item1 - item2) > somevalue):
            sets.append((item1, item2))
您创建一个
集合
列表,该列表将保存绝对差值大于
somevalue
的值对。然后将包含这些项的值的集合附加到
集合中

编辑:列表
集合
是一个可变对象,如果您希望它是不可变的,则此代码不适用于您

是的,这是可能的。 应该是这样的:

sets = []
for item1 in dataset:
    for item2 in dataset:
        if abs(item1 - item2) > somevalue):
            sets.append((item1, item2))
您创建一个
集合
列表,该列表将保存绝对差值大于
somevalue
的值对。然后将包含这些项的值的集合附加到
集合中

编辑:列表
集合
是一个可变对象,如果您希望它是不可变的,则此代码不适用于您

使用嵌套循环

diff = []
for i, val1 in enumerate(dataset):
    for j, val2 in enumerate(dataset[i+1:]):
        if abs(val1 - val2) > some_constant:
            diff.append((i, j))
内部循环使用数组的一个切片,因此我们不向结果中添加
i,j
j,i

使用嵌套循环

diff = []
for i, val1 in enumerate(dataset):
    for j, val2 in enumerate(dataset[i+1:]):
        if abs(val1 - val2) > some_constant:
            diff.append((i, j))
内部循环使用数组的一个片段,因此我们不会将
i,j
j,i
添加到结果中。

Python支持集合:

>>> a = {1, 2, 3}
>>> type(a)
<type 'set'>
>>> b = {2, 4, 5}
>>> a-b # Finds all items in a, but not in b.
set([1, 3])
>>> b-a # Finds all items in b, but not in a.
set([4, 5])
>>> (a-b).union(b-a) # Finds the union of both differences.
set([1, 3, 4, 5])
>a={1,2,3}
>>>类型(a)
>>>b={2,4,5}
>>>a-b#查找a中的所有项目,但不查找b中的项目。
集合([1,3])
>>>b-a#查找b中的所有项目,但不查找a中的项目。
集合([4,5])
>>>联合(b-a)#找到两个差异的联合。
集合([1,3,4,5])
有关文档,请参阅
帮助(设置)

然而,要将这一点应用到你的问题中,需要一个你拥有的数据和你想要的结果的例子。例如,可能需要一些规范化,或者您毕竟没有处理集合。

Python支持集合:

>>> a = {1, 2, 3}
>>> type(a)
<type 'set'>
>>> b = {2, 4, 5}
>>> a-b # Finds all items in a, but not in b.
set([1, 3])
>>> b-a # Finds all items in b, but not in a.
set([4, 5])
>>> (a-b).union(b-a) # Finds the union of both differences.
set([1, 3, 4, 5])
>a={1,2,3}
>>>类型(a)
>>>b={2,4,5}
>>>a-b#查找a中的所有项目,但不查找b中的项目。
集合([1,3])
>>>b-a#查找b中的所有项目,但不查找a中的项目。
集合([4,5])
>>>联合(b-a)#找到两个差异的联合。
集合([1,3,4,5])
有关文档,请参阅
帮助(设置)

然而,要将这一点应用到你的问题中,需要一个你拥有的数据和你想要的结果的例子。例如,可能需要一些规范化,或者您毕竟没有处理集合。

您可以(也可能应该)使用,不需要嵌套循环

例如:如果我们想从10和15(包括10和15)之间的数字中找出差值大于3的元素:

from itertools import permutations

numbers = range(10, 16)
restriction = 3

filtered_numbers_pairs = []
for value, other_value in permutations(numbers, r=2):
    if value - other_value > restriction:
        filtered_numbers_pairs.append((value, other_value))

print(filtered_numbers_pairs)
给我们

[(14, 10), (15, 10), (15, 11)]
[(4, 0), (5, 0), (5, 1)]
或者,如果需要存储值索引,只需添加:

给我们

[(14, 10), (15, 10), (15, 11)]
[(4, 0), (5, 0), (5, 1)]
您可以(也可能应该)使用,不需要嵌套循环

例如:如果我们想从10和15(包括10和15)之间的数字中找出差值大于3的元素:

from itertools import permutations

numbers = range(10, 16)
restriction = 3

filtered_numbers_pairs = []
for value, other_value in permutations(numbers, r=2):
    if value - other_value > restriction:
        filtered_numbers_pairs.append((value, other_value))

print(filtered_numbers_pairs)
给我们

[(14, 10), (15, 10), (15, 11)]
[(4, 0), (5, 0), (5, 1)]
或者,如果需要存储值索引,只需添加:

给我们

[(14, 10), (15, 10), (15, 11)]
[(4, 0), (5, 0), (5, 1)]


我们需要一个穿过数据集并计算元素之间差异的dataUse嵌套循环示例。请更具体一点:添加输入和所需输出的示例我们需要一个穿过数据集并计算元素之间差异的dataUse嵌套循环示例。请,更具体一点:添加输入和所需输出的示例name
set
具有误导性,使我认为它包含
set
objects@AzatIbrakov这不是一个微妙的暗示吗它确实包含集合对象,它是一个sets@gabrielbelini:请参阅我的答案-集合是受支持的类型。您正在使用列表模拟集合,但您没有在那里使用本机集合类型。名称
set
具有误导性,使我认为它包含
set
objects@AzatIbrakov这不是一个微妙的暗示吗它确实包含集合对象,它是一个sets@gabrielbelini:请参阅我的答案-集合是受支持的类型。您正在使用列表来模拟集合,但您没有在那里使用本机集合类型。您所做的是调用,
set
有一个函数:
a.symmetric_difference(b)
(但我不知道它是否是OP所寻找的)@AzatIbrakov:确实,看来运营商已经超载了“-”,我很抱歉用“set”这个词用错了这个问题的措辞。我在随机数据集中寻找一对数字,如果相乘,将产生一个常量值。我为我的错误道歉。别担心——你已经选择了@azatibrakov的答案,这澄清了你的意思。没有伤害!你所做的就是调用,
set
对此有一个解释:
a.symmetric\u difference(b)
(但我不知道这是否是OP所要寻找的)@AzatIbrakov:的确,似乎操作符重载了“-”。我很抱歉用“set”这个词用错了这个问题的措辞。我在随机数据集中寻找一对数字,如果相乘,将产生一个常量值。我为我的错误道歉。别担心——你已经选择了@azatibrakov的答案,这澄清了你的意思。没有伤害!谢谢。这正是我想要的。我真的很感激it@alexanderson:不用客气,谢谢。这正是我想要的。我真的很感激it@alexanderson:不客气(你也可以)