как мне эффективно сопоставить определенное число с набором чисел?

#python

#python

Вопрос:

У меня есть набор чисел, который содержит 2375013 уникальных номеров в текстовом файле. Структура данных выглядит следующим образом:

 11009
900221
2
3
4930568
293
102
  

Я хочу сопоставить число в строке из других данных с набором чисел для извлечения данных, которые мне нужны. Итак, я закодировал так:

    6 def get_US_users_IDs(filepath, mode):
   7     IDs = []
   8     with open(filepath, mode) as f:
   9         for line in f:
  10             sp = line.strip()
  11             for id in sp:
  12                 IDs.append(id.lower())
  13         return IDs


  75         IDs = "|".join(get_US_users_IDs('/nas/USAuserlist.txt', 'r'))
  76         matcher = re.compile(IDs)
  77         if matcher.match(user_id):
  78             number_of_US_user  = 1
  79             text = tweet.split('t')[3]
  

Но для запуска требуется много времени. Есть ли какая-нибудь идея сократить время выполнения?

Комментарии:

1. Измените способ хранения чисел. Поместите их в базу данных sqlite и проиндексируйте их. Затем используйте SQL для запроса.

2. Действительно, sqlite может быть хорошим решением, если ваши данные не помещаются в память. Здесь это не так (2 миллиона целых чисел занимают менее 20 Мб).

Ответ №1:

Я понял, что у вас есть огромное количество идентификаторов в файле, и вы хотите знать, есть ли в этом файле конкретный идентификатор пользователя.

Вы можете использовать набор python.

 fd = open(filepath, mode);
IDs = set(int(id) for id in fd)
...
if user_id in IDs:
  number_of_US_user  = 1
  ...
  

Комментарии:

1. нужно ли мне использовать «set» в этом случае? в наборе чисел уже есть только уникальные номера. Я только что попробовал ваше предложение, но это также занимает много времени …… хм ….. .

2. @MINSUPARK: Вы должны принять этот ответ, щелкнув галочку слева, если ti решил вашу проблему.