Я использую значения по умолчанию, за исключением установки предпосылок к немного грязно-белому (#FAFAFA). Я нахожу что это намного менее утомительный на глазах, чем белый фон.
Предполагая, что вы говорите о питоне, альтернативный способ сделать это:
return len([x for x in myList if x in myDict]) > 0
#!python
any(x in MyDict for x in MyList)
set(MyList).intersection(MyDict)
В дополнение к any (элемент в my_dict для элемента в my_list)
из @ Ответ Ронни :
any(map(my_dict.__contains__, my_list)) # Python 3.x
Или:
from itertools import imap
any(imap(my_dict.__contains__, my_list)) # Python 2.x
Случаи для рассмотрения:
Функции для сравнения (см. main.py ):
def mgag_loop(myDict, myList):
for i in myList:
if i in myDict:
return True
return False
def ronny_any(myDict, myList):
return any(x in myDict for x in myList)
def ronny_set(myDict, myList):
return set(myDict) & set(myList)
def pablo_len(myDict, myList):
return len([x for x in myList if x in myDict]) > 0
def jfs_map(my_dict, my_list):
return any(map(my_dict.__contains__, my_list))
def jfs_imap(my_dict, my_list):
return any(imap(my_dict.__contains__, my_list))
Результаты: mgag_loop ()
- самый быстрый во всех случаях.
def args_key_at_start(n):
'Make args for comparison functions "key at start" case.'
d, lst = args_no_key(n)
lst.insert(0, n//2)
assert (n//2) in d and lst[0] == (n//2)
return (d, lst)
def args_key_at_end(n):
'Make args for comparison functions "key at end" case.'
d, lst = args_no_key(n)
lst.append(n//2)
assert (n//2) in d and lst[-1] == (n//2)
return (d, lst)
def args_no_key(n):
'Make args for comparison functions "no key" case.'
d = dict.fromkeys(xrange(n))
lst = range(n, 2*n+1)
assert not any(x in d for x in lst)
return (d, lst)
Загрузить main.py , make-figures.py , запустить python main. py
( numpy
, matplotlib
должен быть установлен для создания графиков).
Чтобы изменить максимальный размер входного списка, количество точек для построения графика - maxn
, - n точек
соответственно. Пример:
$ python main.py --maxn 65536 --npoints 16
Большое вам всем спасибо. Я проверил производительность всех ответов, и самым быстрым был
return len([x for x in myList if x in myDict]) > 0
, но я не пробовал «установить» ответ, потому что не видел, как превратить его в одну строку.
Это был популярный ответ на связанный вопрос:
>>> if all (k in foo for k in ("foo","bar")):
... print "They're there!"
...
They're there!
Вы можете адаптировать его, чтобы проверять, есть ли какие-либо слова в словаре:
>>> if any(k in myDict for k in ("foo","bar")):
... print "Found one!"
...
Found one!
Вы можете проверить по списку ключей :
>>> if any(k in myDict for k in myList):
... print "Found one!"
...
Found one!