2014-11-10 3 views
0
RA1_matched = [] 
    DEC1_matched = [] 

    A = -1  
    for l in np.nditer(distances1):   
     A = A + 1 #counter 
     for m in np.nditer(distance1_matched):    

      if m == l: 
        RA1_matched.append(RA1_order[A]) 
        DEC1_matched.append(DEC1_order[A]) 
        break 

второй представляет собой массив из 113 и двух является массивом 60. В основном то, что я хочу сделать, это перебрать два и найти какие-либо элементы второго, которые точно так же к элемент в два (я знаю, что они должны быть рядом, просто выслушайте меня). Используя счетчик A, я могу определить номер элемента в массиве second для идентичного элемента, который находится по два, то есть 0.1922574 - это позиция элемента 1 в два, а 0.1922574 - позиция элемента 15 во втором (мне нужно найти позицию элемента так Я могу назначить элемент в этой позиции элемента в RA1_order RA1_matched). Но он заканчивается (он находит только 44 матча вместо 60), потому что два меньше второго. Я попытался их обменивать, но тогда счетчик поднялся до 59, когда мне нужно, чтобы счетчик поднялся до 113. Что я могу сделать? Я попытался использовать,Loops и счетчики (Python)

for X in range (0, length): #length is the size of second and goes from 0-112 
    A = X, 

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

--edit

После некоторой обратной связи я буду расширять и редактировать некоторые имена переменных! Проект является астрофизическим, но я постараюсь обобщить свой вопрос. Я использую смесь списков и массивов numpy как меня и код обмена партнерами друг с другом, но достаточно легко преобразовать массивы в списки ,

В принципе, у меня есть два списка, длина X 100 и Y длины 60. Я хочу пройти список Y и найти одинаковые элементы в списке X. Тогда, когда я нахожу идентичный элемент, я хочу знать, что позиции элемента в списке. Используя эту позицию, я могу отсортировать некоторые данные, используя другой код, который я написал. Кто-то упомянул использовать enumerate, но я не уверен, как применить это к своей проблеме.

+1

Добро пожаловать в StackOverflow. Вы можете получить более качественные ответы, если попросите больше об общей проблеме, чем о каком-то конкретном решении. –

+0

Я не уверен, что вы пытаетесь сделать здесь, но если вы просто хотите получить счетчик, который автоматически начинается с '0' и обновляется в соответствии с индексом текущего значения' l', вы хотите [' enumerate'] (https://docs.python.org/3/library/functions.html#enumerate): 'для a, l в enumerate (np.nditer (second)):'. Это то, что вы ищете? – abarnert

+1

Что именно вы пытаетесь достичь? Это может (я чувствую, что это будет) лучше не использовать циклы или счетчики для того, что вы делаете. Кроме того, для вас и для тех, кто читает ваш код, полезно использовать более описательные имена переменных, чем 'two' или' second'. –

ответ

0

Наборы и список понятий должны вместе решить вашу проблему.

X = [2,3,4,5,6] 
Y = [3,4] 
Z = ['a', 'b', 'c', 'd', 'e', 'f'] 
print [Z[i] for i in set(X).intersection(Y)] 

Выход:

['d', 'e'] 
0

Выработать на мой комментарий, это то, что я предлагал:

for y in Y: 
    try: 
     positionInX = X.index(y) 
     # use positionInX as appropriate.. 
    except: 
     pass