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
我想 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