我想比较两个列表。我想在第一个列表中找到在第二个列表中没有相应条目的元素(顺序并不重要):
$url = 'http://www.mywebsite.com/sweeps/test.txt';
$content = file_get_contents($url);
$json = json_decode($content,true);
$tmp = explode('][', $json_string);
if (!count($tmp)) {
$json = json_decode($json_string);
var_dump($json);
} else {
foreach ($tmp as $json_part) {
$json = json_decode('['.rtrim(ltrim($json_string, '['), ']').']');
var_dump($json);
}
}
require_once 'csrest_general.php';
require_once 'csrest_subscribers.php';
$auth = array(
'api_key' => 'xxxxxxxxxxxxxxx');
$wrap = new CS_REST_Subscribers('xxxxxxxxxx', $auth);
$result = $wrap->add($json(
'EmailAddress' => $email,
'Name' => $custom_3_first,
'Resubscribe' => false
));
所以我希望输出为
a = ['hi', 'hi', 'bye', 'hi']
b = ['hi', 'hi', 'bye']
因为第一个列表有一个额外的' hi'在它中没有出现在第二个列表中。
如果我选择the usual techniques之一,我可以使用列表理解:
c = ['hi']
给了我[x for x in a if x not in b]
,这不是我想要的。
我尝试过的事情涉及使用具有相同结果的[]
运算符,因为该操作会将列表成员减少为唯一性。
这似乎是一个简单的操作。我是否需要首先枚举列表中的每个元素,并创建要比较的元组?我需要将它们放入Counter dict吗?当我只是想对列表中的元素进行简单比较时,所有这些听起来有点像矫枉过正!
答案 0 :(得分:6)
Counter个对象支持多集操作:
heroku help
从柜台重建列表:
>>> from collections import Counter
>>> a = ['hi', 'hi', 'bye', 'hi']
>>> b = ['hi', 'hi', 'bye']
>>> Counter(a) - Counter(b)
Counter({'hi': 1})
答案 1 :(得分:0)
您可以简单地执行此操作,无需任何导入,使用while循环检查每个项目:
a = ['hi', 'hi', 'bye', 'hi']
b = ['hi', 'hi', 'bye']
c = []
while a:
# Get first item (and remove).
item = a.pop(0)
if item in b:
b.remove(item)
else:
c.append(item)
print c