我有两个具有相同数量元素的Python列表.第一个列表的元素是唯一的,第二个列表中的元素 - 不一定如此.例如
list1 = ['e1', 'e2', 'e3', 'e4', 'e5', 'e6', 'e7']
list2 = ['h1', 'h2', 'h1', 'h3', 'h1', 'h2', 'h4']
Run Code Online (Sandbox Code Playgroud)
我想删除第二个列表中的所有"第一次遇到"元素及其第一个列表中的相应元素.基本上,这意味着删除所有唯一元素和重复项的第一个元素.通过上面的例子,应该是正确的结果
>>>list1
['e3', 'e5', 'e6']
>>>list2
['h1', 'h1', 'h2']
Run Code Online (Sandbox Code Playgroud)
也就是说,元素'e1'被删除了,因为第一次遇到了相应的'h1','e2'被删除了,因为第一次看到'h2',因为'h1'已经'e3'了看到'e4'被删除了,因为第一次看到'h3','e5'被留下了因为'h1'已经被看到了,'e6'被留下了因为'h2'已经被看到了,'e7'被删除了因为'h4'是第一次出现.
什么是解决这个问题的有效方法?列表可能包含数千个元素,因此如果可能的话,我宁愿不复制它们或运行多个循环.
我有一个使用以下架构的数据库:
CREATE TABLE IF NOT EXISTS `sessions` (
`starttime` datetime NOT NULL,
`ip` varchar(15) NOT NULL default '',
`country_name` varchar(45) default '',
`country_iso_code` varchar(2) default '',
`org` varchar(128) default '',
KEY (`ip`),
KEY (`starttime`),
KEY (`country_name`)
);
Run Code Online (Sandbox Code Playgroud)
(实际表包含更多列;我只包含我查询的列。)引擎是 InnoDB。
正如您所看到的,有 3 个索引 - ip
、starttime
和country_name
。
该表非常大 - 它包含大约 150 万行。我正在对其运行各种查询,尝试提取一个月的信息(2018 年 8 月,在下面的示例中)。
像这样的查询
SELECT
UNIX_TIMESTAMP(starttime) as time_sec,
country_iso_code AS metric,
COUNT(country_iso_code) AS value
FROM
sessions
WHERE
starttime >= FROM_UNIXTIME(1533070800) AND
starttime <= FROM_UNIXTIME(1535749199)
GROUP BY …
Run Code Online (Sandbox Code Playgroud)