2013-11-09 5 views
0

У меня есть список кортежейПроверьте укороченные значения кортежа в списке?

In [142]: mylist=[(0.0, 0.0), (0.0, 0.769883), (-0.01435677, 1.7573411), (-0.3796871, -0.40361387), (-0.27704585, -1.7006601), (-0.26976547, -2.6480746), (-0.27020714, -3.0438666), (-0.2759932, -3.638946), (-0.28580084, -4.182567), (-0.29590216, -4.5594716), (-0.31486654, -5.1321993), (-0.3386181, -5.701327), (-0.37045696, -6.34038), (-0.40544215, -6.94697), (-0.45580167, -7.711907), (-0.48936173, -8.165736), (-0.52177864, -8.558438), (-0.5721365, -9.112968), (-0.6326114, -9.723627), (-0.6764244, -10.130929), (-0.7162372, -10.471702), (-0.73864824, -11.2733345), (-0.6795322, -11.688038), (-0.6065086, -12.021755), (-0.52627456, -12.4043045), (-0.42850703, -13.172687), (-0.2827803, -15.462493), (-0.25139827, -16.006815), (-0.21802832, -16.84582)] 

Я хочу, чтобы проверить, является ли этот кортеж (-0.405442, -6.94697) в mylist или нет.

(-0.40544215, -6.94697) находится в списке, как показано ниже:

In [143]: mylist[13] 
Out[143]: (-0.40544215, -6.94697) 

Но мой кортеж запрос был несколько усеченным до (-0.405442, -6.94697).

Как я могу позволить Python сказать мне, что (-0.405442, -6.94697) находится в mylist (игнорировать усечение)?

+7

'-0.40544215! = -0.405442' –

+0

@PauloBu Позор на меня. Так жаль! Но я никогда не делаю усечения или этого, почему пропустил две десятичные цифры. –

+0

Не могу сказать, что я больше не вижу кода, насколько я отношусь к вам, это тот, кто их совершает, когда вы специально спрашиваете: '(-0.405442, - 6.94697) в моем списке' на переводчика. –

ответ

1

(-0.405442, -6.94697) нет в вашем списке. (-0.40544215, -6.94697) есть.

Если вы хотите проверить, если кортежи в списке с точностью до 6 десятичных цифр, попробуйте этот

(-0.405442, -6.94697) in [(round(i[0], 6), round(i[1], 6)) for i in mylist] 

Если вы хотите проверить это несколько раз, ваши лучше создать новый список, хотя :

mynewlist = [(round(i[0], 6), round(i[1], 6)) for i in mylist] 
(-0.405442, -6.94697) in mynewlist 
+0

(-0.405442, -6.94697) нет в вашем списке. (-0.405442, -6.94697). Оба одинаковы, что вы имеете в виду? – Mutant

+0

@Mutant: Typo, исправлено это – jazzpi

0

Потому что (-0,405442, -6,94697), не совпадает с (-0,40544215, -6.94697)

>>> mylist=[(0.0, 0.0), (0.0, 0.769883), (-0.01435677, 1.7573411), (-0.3796871, -0.40361387), (-0.27704585, -1.7006601), (-0.26976547, -2.6480746), (-0.27020714, -3.0438666), (-0.2759932, -3.638946), (-0.28580084, -4.182567), (-0.29590216, -4.5594716), (-0.31486654, -5.1321993), (-0.3386181, -5.701327), (-0.37045696, -6.34038), (-0.40544215, -6.94697), (-0.45580167, -7.711907), (-0.48936173, -8.165736), (-0.52177864, -8.558438), (-0.5721365, -9.112968), (-0.6326114, -9.723627), (-0.6764244, -10.130929), (-0.7162372, -10.471702), (-0.73864824, -11.2733345), (-0.6795322, -11.688038), (-0.6065086, -12.021755), (-0.52627456, -12.4043045), (-0.42850703, -13.172687), (-0.2827803, -15.462493), (-0.25139827, -16.006815), (-0.21802832, -16.84582)] 
>>> (-0.40544215, -6.94697) in mylist 
True 

* Если только его опечатка в вопросе.

+0

Извините! Нет опечаток. Теперь я начинаю задаваться вопросом, почему происходит усечение. Я никогда этого не делаю. –

0

Если вы хотите, чтобы найти приблизительные матчи с помощью понимания, вы можете просто проверить, если номер «достаточно близко» до нужного значения, проверяя, если абсолютное значение числа вы хотите минус число найденного меньше, чем некоторый предел, например;

>>> [(x,y) for (x,y) in mylist if abs(-0.405442-x)<0.001 and abs(-6.94697-y)<0.001] 

[(-0.40544215, -6.94697)] 

... найдет значения, которые находятся в пределах 0.001 от требуемых значений.

Смежные вопросы