查找包含两个特定元素的列表中的列表

时间:2016-04-04 14:55:03

标签: python list

我有一个列表,其中包含许多具有固定数量元素的列表:

info = [['N', 100, 'A'], ['O', 99, 'A'], ['C', 105, 'A'], ...]

我想找到包含'N'100的元素的索引,即0。我尝试过这样的东西来获取元素本身:

matches = [a for name in a[2] and resnum in a[5] for a in info]

哪个不起作用。有没有办法用列表推导来做到这一点?

2 个答案:

答案 0 :(得分:2)

您可以使用next()enumerate()

>>> next(i for i, (a, b, _) in enumerate(info) if a == 'N' and b == 100)
0
>>> next(i for i, (a, b, _) in enumerate(info) if a == 'C' and b == 105)
2

请注意,如果没有匹配,next()会抛出StopIteration例外 - 您可以使用try/except处理它,也可以提供默认值 ,-1:

>>> next((i for i, (a, b, _) in enumerate(info) if a == 'invalid' and b == 0), -1)
-1

_是一种命名throwaway variables的规范方式(在这种特殊情况下,我们不需要子列表的第三个值)。

答案 1 :(得分:2)

如果你想修复你的列表理解,那应该这样做:

$conn1= new mysqli($db_conn_server, $db_conn_username, $db_conn_password, $db_conn_dbname);

if ($conn1->connect_error) { $conn1->close();
$conn2= new mysqli($db_conn_server, $db_conn_username, $db_conn_password, $db_conn_dbname);

$sms_sys_query2 = "INSERT INTO `sms_messages_tbl` (`session_unq_id`)
VALUES ('$transaction_request_to_api_code')";   

    if ($conn2->query($sms_sys_query2) === TRUE) { $conn2->close(); exit();
    } else { $conn2->close(); exit(); }

}else {

$sms_sys_query1 = "INSERT INTO `sms_messages_tbl` (`session_unq_id`)
VALUES ('$transaction_request_to_api_code')";   

if ($conn1->query($sms_sys_query1) === TRUE) { $conn1->close(); exit(); 
} else { $conn1->close(); exit(); }
}