Используйте enumerate
, чтобы отслеживать индекс и набор, чтобы отслеживать увиденный элемент:
l = [1, 1, 2, 3]
inds = []
seen = set()
for i, ele in enumerate(l):
if ele not in seen:
inds.append(i)
seen.add(ele)
Если вы хотите оба:
inds = []
seen = set()
for i, ele in enumerate(l):
if ele not in seen:
inds.append((i,ele))
seen.add(ele)
Или, если вы хотите оба в разных списках:
l = [1, 1, 2, 3]
inds, unq = [],[]
seen = set()
for i, ele in enumerate(l):
if ele not in seen:
inds.append(i)
unq.append(ele)
seen.add(ele)
Использование набора является наилучшим подходом:
In [13]: l = [randint(1,10000) for _ in range(10000)]
In [14]: %%timeit
inds = []
seen = set()
for i, ele in enumerate(l):
if ele not in seen:
inds.append((i,ele))
seen.add(ele)
....:
100 loops, best of 3: 3.08 ms per loop
In [15]: timeit OrderedDict((x, l.index(x)) for x in l)
1 loops, best of 3: 442 ms per loop
In [16]: l = [randint(1,10000) for _ in range(100000)]
In [17]: timeit OrderedDict((x, l.index(x)) for x in l)
1 loops, best of 3: 10.3 s per loop
In [18]: %%timeit
inds = []
seen = set()
for i, ele in enumerate(l):
if ele not in seen:
inds.append((i,ele))
seen.add(ele)
....:
10 loops, best of 3: 22.6 ms per loop
Итак, для 100k
элементов 10.3
секунд vs 22.6 ms
], если вы попробуете что-нибудь большее с меньшими обманами, например [randint(1,100000) for _ in range(100000)]
, у вас будет время прочитать книгу. Создание двух списков незначительно медленнее, но на порядок выше, чем при использовании list.index.
Если вы хотите получить значение за раз, вы можете использовать функцию генератора:
def yield_un(l):
seen = set()
for i, ele in enumerate(l):
if ele not in seen:
yield (i,ele)
seen.add(ele)
Это работает на меня. Я изменил браузер по умолчанию в Windows.
или прямая ссылка на настройки: мс-settings:defaultapps
В VS2008 просто щелкните ссылку правой кнопкой мыши и выберите «Открыть ссылку во внешнем окне». Вам необходимо выбрать Chrome в качестве браузера по умолчанию.
Мне не удалось найти настройку для этого, поэтому я написал простой макрос, который вы можете использовать. Вы можете привязать это к комбинации клавиш, как и все макросы. Так работа будет выполнена, пока мы не получим лучший ответ.
Sub OpenURLInChrome()
'copy to end of line
DTE.ActiveDocument.Selection.EndOfLine(True)
'set var
Dim url As String = DTE.ActiveDocument.Selection.Text
'launch chrome with url
System.Diagnostics.Process.Start( _
Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) _
+ "\Google\Chrome\Application\chrome.exe", url)
End Sub
Просто поместите курсор перед URL-адресом и запустите макрос ...