Select Python 中的一组项目

Select an item from a set in Python

我想 select 一套中的一件。是哪一项并不重要,但我希望每次调用函数时都是同一项。

例如,如果我有这组:

my_set = set(["ABC","ABC inc", "ABC ltd"])

然后我想return其中的任何一个,但只要函数是运行,我就想要相同的那个。 [IE。所以我总是会得到 "ABC",或者每当我 运行 使用上面的集合时总是会得到 "ABC inc"。] 如果我使用列表,我只会取第一个项目,但集合不会本身没有第一。

这与 selecting 运行domly [例如How do I pick 2 random items from a Python set? ] 每次都会改变 运行.

转换成列表排序怎么样?

my_list = list(my_set)
my_list.sort()
chosen_element = my_list[0]

你可以使用带有记忆功能的函数

def get_random(my_set,memo={}):
    if id(my_set) not in memo:
       memo[id(my_set)] = random.choice(list(my_set))
    return memo[id(my_set)]

a_set = set([1,2,3,4,5])
print get_random(a_set)
print get_random(a_set)

这会 总是 给你相同的值,只要你传入 a_set ...(不同的集合会给出不同的答案)

如果您想确保该物品仍在集合中,您可以更改备忘录,如果检查

def get_random(my_set,memo={}):
    if id(my_set) not in memo or memo[id(my_set)] not in my_set:
       memo[id(my_set)] = random.choice(list(my_set))
    return memo[id(my_set)]

集合以哈希表的形式实现。所以顺序是确定的,除非你 insert/remove 一个元素。

说 x = 设置 (['1','123','2','10'])

此集合的顺序始终为“1”、“2”、“123”、“10”(我猜是字典顺序)

但是如果你要插入或删除一个元素,那么你将不得不使用某种排序函数来确定顺序

我可能误解了你的问题,但如果你正在寻找任何特定的东西,检查集合中的成员资格应该有用。

letter_set = set(['abc','ABC','xyz','XYZ'])
check_string = 'ABC'
if check_string in letter_set:
    output = check_string

如果所需的字符串在集合中,这应该只给出输出值。

使用min().

>>> my_set = set(["ABC","ABC inc", "ABC ltd"])
>>> min(my_set)
'ABC'

如果为空则引发 ValueError。从 Python 3.4 开始,可以返回默认值。

我为此找到的另一个答案是使用 min:

elem = min(mySet)

也许这可以帮到你:

from iteration_utilities import first
from simple_benchmark import benchmark

def forLoop(s):
    value = len(s)/2
    for elem in s:
        if elem == value:
            return elem


def RemoveAndSet(s: set):
    value = len(s)/2
    s.remove(value)
    s.add(value)


argumente = {2 ** i: set(range(2 ** i)) for i in range(10, 13)}
a = benchmark([forLoop, RemoveAndSet],
              argumente,
              function_aliases={first: 'First'})

print(a)

输出:

         forLoop       RemoveAndSet
   32    8.139000e-07  4.400154e-07
   64    1.403343e-06  5.584737e-07
   128   2.584880e-06  5.288382e-07
   256   4.903100e-06  4.909571e-07
   512   9.628500e-06  5.034354e-07
   1024  1.899860e-05  4.541565e-07
   2048  3.760350e-05  5.803184e-07

或者说:https://pypi.org/project/ordered-set/