如何获得Python中相邻元组的最大值?

如何获得Python中相邻元组的最大值?,python,tuples,Python,Tuples,假设我有下面的元组 dummy = [("text", 10), ("This is the Sentence", 20), ("that I Want", 20), ("to Get", 20), ("text", 8), ("text", 6)] 我想得到“这是我想得到的句子”,忽略其余部分。特别是文本总是具有最大值(在本例中为20

假设我有下面的元组

dummy = [("text", 10), ("This is the Sentence", 20), 
         ("that I Want", 20), ("to Get", 20), 
         ("text", 8), ("text", 6)]
我想得到“
这是我想得到的句子”
,忽略其余部分。特别是文本总是具有最大值(在本例中为20),并且它们彼此相邻。基本上,它将只收集彼此相邻的具有最大值的元组

在下面的代码中,我只收集第一个max元组,但它忽略了其余的

from operator import itemgetter

max(dummy, key=itemgetter(1))
如何使其获得所有其他最大值

[i for i, j in dict(dummy).items() if j==max(dict(dummy).values())]
这将给出最大值

示例结果=

['This is the Sentence', 'that I Want', 'to Get']
这将给出最大值

示例结果=

['This is the Sentence', 'that I Want', 'to Get']
像这样的

>>> t = np.array([d[0] for d in dummy])
>>> v = np.array([d[1] for d in dummy])
>>> print(t[v==v.max()])

['This is the Sentence' 'that I Want' 'to Get']
像这样的

>>> t = np.array([d[0] for d in dummy])
>>> v = np.array([d[1] for d in dummy])
>>> print(t[v==v.max()])

['This is the Sentence' 'that I Want' 'to Get']

这对你有用

from operator import itemgetter
# find the max value
max_sen, max_val = max(dummy, key=itemgetter(1))
# filter based on max value and join
" ". join([x[0] for x in filter(lambda x:x[1]==max_val, dummy)])

这对你有用

from operator import itemgetter
# find the max value
max_sen, max_val = max(dummy, key=itemgetter(1))
# filter based on max value and join
" ". join([x[0] for x in filter(lambda x:x[1]==max_val, dummy)])
为什么不: 使用dict值获取max键并通过它实现过滤器

m_value = max(dict(dummy).values())
" ".join([x for x, n in dummy if n == m_value])
我的结果是:

'This is the Sentence that I Want to Get'
为什么不: 使用dict值获取max键并通过它实现过滤器

m_value = max(dict(dummy).values())
" ".join([x for x, n in dummy if n == m_value])
我的结果是:

'This is the Sentence that I Want to Get'

我最初的假设似乎是错误的。不要考虑在这个答案中提到的实现。将此保留在此处以供参考

这里的大多数答案使用
sort
max
或类似的方法,从而导致 在数据中迭代两次。我认为这是不必要的。 检查下面的实现,您应该可以使用它获得所需的输出 通过数据的单个迭代

我补充的答案似乎表现得更糟。特别是使用字符串的
答案2
。我相信罪犯每次都在重新分配字符串

此外,列表理解似乎比附加更好。与其他答案相比,答案1的速度也相对较慢

要验证这些,可以尝试以下代码段

答复1:

dummy = [("text", 10), ("This is the Sentence", 20),
         ("that I Want", 20), ("to Get", 20),
         ("text", 8), ("text", 6)]

max_val = float("-inf")
max_data = []

for data, value in dummy:
    if value > max_val:
        max_val = value
        max_data = [data]
    elif value == max_val:
        max_data.append(data)
    else:
        continue

print(max_data)
答复2:

dummy = [("text", 10), ("This is the Sentence", 20),
         ("that I Want", 20), ("to Get", 20),
         ("text", 8), ("text", 6)]

max_val = float("-inf")
max_data = ""

for data, value in dummy:
    if value > max_val:
        max_val = value
        max_data = data
    elif value == max_val:
        max_data += " " + data
    else:
        continue

print(max_data)

我最初的假设似乎是错误的。不要考虑在这个答案中提到的实现。将此保留在此处以供参考

这里的大多数答案使用
sort
max
或类似的方法,从而导致 在数据中迭代两次。我认为这是不必要的。 检查下面的实现,您应该可以使用它获得所需的输出 通过数据的单个迭代

我补充的答案似乎表现得更糟。特别是使用字符串的
答案2
。我相信罪犯每次都在重新分配字符串

此外,列表理解似乎比附加更好。与其他答案相比,答案1的速度也相对较慢

要验证这些,可以尝试以下代码段

答复1:

dummy = [("text", 10), ("This is the Sentence", 20),
         ("that I Want", 20), ("to Get", 20),
         ("text", 8), ("text", 6)]

max_val = float("-inf")
max_data = []

for data, value in dummy:
    if value > max_val:
        max_val = value
        max_data = [data]
    elif value == max_val:
        max_data.append(data)
    else:
        continue

print(max_data)
答复2:

dummy = [("text", 10), ("This is the Sentence", 20),
         ("that I Want", 20), ("to Get", 20),
         ("text", 8), ("text", 6)]

max_val = float("-inf")
max_data = ""

for data, value in dummy:
    if value > max_val:
        max_val = value
        max_data = data
    elif value == max_val:
        max_data += " " + data
    else:
        continue

print(max_data)
以下是我的方法:

from operator import itemgetter

dummy = [("text", 10), ("This is the Sentence", 20), 
         ("that I Want", 20), ("to Get", 20), 
         ("text", 8), ("text", 6)]

max_num = max(dummy, key=itemgetter(1))[1]
text_blocks = [text for text, num in dummy if num == max_num]

sentence = ' '.join(text_blocks)

print(sentence)

# This is the Sentence that I Want to Get

您可以进一步改进代码,将其用作虚拟项

以下是我的方法:

from operator import itemgetter

dummy = [("text", 10), ("This is the Sentence", 20), 
         ("that I Want", 20), ("to Get", 20), 
         ("text", 8), ("text", 6)]

max_num = max(dummy, key=itemgetter(1))[1]
text_blocks = [text for text, num in dummy if num == max_num]

sentence = ' '.join(text_blocks)

print(sentence)

# This is the Sentence that I Want to Get


您可以进一步改进代码,将其用作虚拟项

为什么不使用一行呢?有海象操作员作为奖励

import pandas as pd

' '.join((df :=pd.DataFrame(dummy)).loc[df[1] == max(df[1]),0])
输出

'This is the Sentence that I Want to Get'

为什么不是一艘熊猫一号班轮?有海象操作员作为奖励

import pandas as pd

' '.join((df :=pd.DataFrame(dummy)).loc[df[1] == max(df[1]),0])
输出

'This is the Sentence that I Want to Get'


这并不能保证句子的顺序。为什么要使用
dict(dummy).items()???不要每次在循环中都计算这个:
max(dict(dummy).values())
,这使得这个算法不必要地是二次时间这不能保证句子的顺序为什么要使用
dict(dummy).items()
???不要每次在循环中都计算这个:
max(dict(dummy).values())
,这使得这个算法在我看来不必要地是二次时间:过代码(不像python方式),看起来它的性能很差。这可能不是编写解决方案的最python方式。但我有个问题。为什么您认为这会执行得很糟糕?请尝试在web python循环+附加vs列表中查找comprehension@BrownBear那么现在它会更好吗?不确定,从我的角度看,您现在似乎有一个错误:过代码(不像python那样)而且看起来它的性能会很差。这可能不是编写解决方案的最佳方式。但我有个问题。为什么您认为这会执行得很糟糕?请尝试在web python循环+附加vs列表中查找comprehension@BrownBear现在会更好吗?不确定,看起来您现在有一个错误。它不工作,我想第一行应该是
m_value=max(dict(dummy).values())
?是的,谢谢!这是一个输入错误)它不工作了,我想第一行应该是
m_value=max(dict(dummy).values())
?是的,谢谢!这是一个输入错误)若有最大值的元组,但它们不相邻会怎样?若有最大值的元组,但它们不相邻会怎样?