我有一个从空开始的元组列表,并附加了新的用户生成的元组。
if left_mouse == True:
generic_list.append((mouse_position_x, mouse_position_y))
为了防止多个元组具有相同的(x,y)数据,我想遍历列表并检查最新的元组是否与列表中的任何其他元组相同,如果是,则替换旧的新元组。
for tuple in tuple_list:
if tuple_list[-1].position == tuple_list[i].position:
tuple_list.remove(i)
我知道我所得到的是错的,但我不知道为什么或如何前进。任何帮助都会非常感激。
编辑:我现在正在使用set(),它完美无缺。谢谢大家。
答案 0 :(得分:0)
如果订单无关紧要,您可以使用一套。它只会在列表中保留唯一的元组。然后,如果需要,您可以从此集创建新列表。例如:
generic_list = [(1,2), (3,4), (1,2), (5,6)]
generic_list = set(generic_list) # {(1, 2), (3, 4), (5, 6)}
generic_list = list(generic_list) # [(1, 2), (5, 6), (3, 4)]
答案 1 :(得分:0)
我建议使用一个集合(而不是列表):
<!DOCTYPE html>
<html lang="">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title></title>
</head>
<body>
<a href="#" id="get_location">Find Me</a>
<div id="map">
<iframe id="google_map" width="425" height="350" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="https://maps.google.co.uk?output=embed"></iframe>
</div>
<script>
var c = function (pos) {
var lat = pos.coords.latitude,
long = pos.coords.longitude,
coords = lat + ', ' + long;
document.getElementById('google_map').setAttribute('src', 'https://maps.google.co.uk/?q=' + coords + '&z=60&output=embed');
}
document.getElementById('get_location').onclick = function () {
navigator.geolocation.getCurrentPosition(c);
return false;
}
</script>
</body>
</html>
答案 2 :(得分:0)
针对您的具体问题:您正在使用名为tuple_list
的变量迭代tuple
。这就是你应该用来比较的东西:
last_tuple = tuple_list[-1]
for tuple in tuple_list[:-1]:
if tuple.position == last_tuple.position:
tuple_list.remove(tuple)
除非你不应该这样做,因为你正在做各种额外的工作。相反,保持与您的元组列表并行的set
,并使用该集来确定您之前是否已经看过该位置。
(这假设您的列表长达数百或数千个元素。如果您只跟踪三个或四个位置,您可以只搜索列表。)
generic_list = []
positions_seen = set(generic_list)
# blah blah blah code
if left_mouse:
pos = (mouse_position_x, mouse_position_y)
if pos not in positions_seen:
positions_seen.add(pos)
generic_list.append(pos)