Python 中的元组列表
List of tuples in Python
我有一个元组列表
lista = [('ab','tall',3),
('go','cd',2),
('gb','my',1),
('game','me', 2),
('uk','try',4),
('me','hello',1),
('good','try',3)]
我需要提取元组的第 3 个值小于 3 的所有元素,然后检查它们是否彼此相邻。
需要输出
('go','cd',2)
、('gb','my',1)
、('game','me', 2)
和 ('me','hello',1)
然后检查哪些是相邻的,在本例中是 ('go','cd',2)
、('gb','my',1)
、('game','me', 2)
是相邻的。
第一部分:
提取元组第 3 个值小于 3 的所有元素。
通过列表理解。
代码:
>>> lista = [('ab','tall',3),
... ('go','cd',2),
... ('gb','my',1),
... ('game','me', 2),
... ('uk','try',4),
... ('me','hello',1),
... ('good','try',3)]
>>> [i for i in lista if i[2] < 3]
[('go', 'cd', 2), ('gb', 'my', 1), ('game', 'me', 2), ('me', 'hello', 1)]
>>>
我不是 100% 确定你所说的 "next to each other" 是什么意思,但我试着猜测了一下。有必要添加条件检查特殊情况,如 len(lista) < 2
。
此外 is_valid
列表不是必需的,您可以将条件移动到循环中,但我发现这更容易理解。
lista = [('ab','tall',3),
('go','cd',2),
('gb','my',1),
('game','me', 2),
('uk','try',4),
('me','hello',1),
('good','try',3)]
# items that fullfill the condition
is_valid = [1 if item[2] < 3 else 0 for item in lista]
# handling "next to each other condition" of the first item
valid_items = []
if is_valid[0] == 1 and is_valid[1]:
valid_items.append(lista[0])
# handling "next to each other condition" of items that are not the first and not the last
for item_id in range(1, len(is_valid)-1):
if is_valid[item_id] == 1 and (is_valid[item_id - 1] == 1 or is_valid[item_id + 1] == 1):
valid_items.append(lista[item_id])
# handling "next to each other condition" of the last item in the list
if is_valid[-2] == 1 and is_valid[-1] == 1:
valid_items.append(lista[-1])
# just print the result
print valid_items
我有一个元组列表
lista = [('ab','tall',3),
('go','cd',2),
('gb','my',1),
('game','me', 2),
('uk','try',4),
('me','hello',1),
('good','try',3)]
我需要提取元组的第 3 个值小于 3 的所有元素,然后检查它们是否彼此相邻。
需要输出
('go','cd',2)
、('gb','my',1)
、('game','me', 2)
和 ('me','hello',1)
然后检查哪些是相邻的,在本例中是 ('go','cd',2)
、('gb','my',1)
、('game','me', 2)
是相邻的。
第一部分:
提取元组第 3 个值小于 3 的所有元素。
通过列表理解。
代码:
>>> lista = [('ab','tall',3),
... ('go','cd',2),
... ('gb','my',1),
... ('game','me', 2),
... ('uk','try',4),
... ('me','hello',1),
... ('good','try',3)]
>>> [i for i in lista if i[2] < 3]
[('go', 'cd', 2), ('gb', 'my', 1), ('game', 'me', 2), ('me', 'hello', 1)]
>>>
我不是 100% 确定你所说的 "next to each other" 是什么意思,但我试着猜测了一下。有必要添加条件检查特殊情况,如 len(lista) < 2
。
此外 is_valid
列表不是必需的,您可以将条件移动到循环中,但我发现这更容易理解。
lista = [('ab','tall',3),
('go','cd',2),
('gb','my',1),
('game','me', 2),
('uk','try',4),
('me','hello',1),
('good','try',3)]
# items that fullfill the condition
is_valid = [1 if item[2] < 3 else 0 for item in lista]
# handling "next to each other condition" of the first item
valid_items = []
if is_valid[0] == 1 and is_valid[1]:
valid_items.append(lista[0])
# handling "next to each other condition" of items that are not the first and not the last
for item_id in range(1, len(is_valid)-1):
if is_valid[item_id] == 1 and (is_valid[item_id - 1] == 1 or is_valid[item_id + 1] == 1):
valid_items.append(lista[item_id])
# handling "next to each other condition" of the last item in the list
if is_valid[-2] == 1 and is_valid[-1] == 1:
valid_items.append(lista[-1])
# just print the result
print valid_items