比较列表中的元组元素

时间:2018-11-13 06:09:43

标签: python python-3.x python-2.7

我正在尝试编写一个代码,用于比较每个元组的第二个元素,并提取包含第二个元素重复项的元组。

例如,如果我有

List = [(0, 2), (1, 0), (2, 1), (3, 2)]

duplicate_tuples = [(0, 2), (3, 2)]  # desired output

我只是不知道如何在迭代中指定第二个元素

for i in List: # would iterate each tuple
    if i[1] of i in List is duplicate...

缺少Python语法令人沮丧。我应该如何解决这个问题?

4 个答案:

答案 0 :(得分:2)

您可以在collections.defaultdict()中收集元组,然后报告具有多个重复项的列表:

 @JS('function')
library function.js;
import 'package:angular/angular.dart';
import 'dart:convert';
import 'package:js/js.dart';

@Component(
  selector: 'app-component',
  templateUrl: 'app_component.html',
)

class AppComponent {
  var name = 'Excel Generation';
  @JS("function.JSONToCSVConvertor")
   external void JSONToCSVConvertor(jsonvalue,Title);

  showData(){

    var jsonData = [{"Vehicle":"BMW","Date":"30, Jul 2013 09:24 AM","Location":"Hauz Kh"}];
    var jsonvalue = json.encode(jsonData);
    String Title = "Excel project";
JSONToCSVConvertor(jsonvalue,Title);

 }

}

或将重复项保留在字典中以便于查找:

from collections import defaultdict

lst = [(0, 2), (1, 0), (2, 1), (3, 2), (2, 0)]

dups = defaultdict(list)
for fst, snd in lst:
   dups[snd].append((fst, snd))

print([v for k, v in dups.items() if len(v) > 1])
# [[(0, 2), (3, 2)], [(1, 0), (2, 0)]]

答案 1 :(得分:2)

处理numpy数组将比列表/元组有效。

var str = "Pigs __(2cansf33't)__ fly"

var convertedString = str.replace(/\s__\(([a-z0-9']*)\)__\s/, ' '); 

console.log(convertedString)

基于unique function的输出,我们可以生成重复列表

import numpy as np
a = np.array([(0, 2), (1, 0), (2, 1), (3, 2),(3,0)])

unique_vals,inverse_indices,counts=np.unique(a[:,1],return_inverse=True,return_counts=True)

输出:

duplicates=[(i,a[inverse_indices==i]) for i  in unique_vals[np.where(counts>1)[0]]]

答案 2 :(得分:1)

可能会有更多重复项,因此Plugin是更好的选择。

groupby

答案 3 :(得分:1)

这是使用numpy的另一种方法:

duplicate_list = []

foo = np.array([(0,2), (1,0), (2,1), (3,2), (3,0), (1,2)])

for i in range(len(np.unique(foo[:,1]))):
    if np.sum(foo[:,1] == i) > 1:
        duplicate_list.append(foo[foo[:,1] == i].tolist())

print(duplicate_list)

输出:

[[[1, 0], [3, 0]], [[0, 2], [3, 2], [1, 2]]]

使用np.unique(foo [:,1])我们获得元组中第二个元素的唯一元素,然后如果计数大于1或存在重复项,则将其附加到列表中,这将返回2个列表,因为我们有2次出现(0和2)。 如果您有特定的数字,请说(2),这样我们就可以避免循环。

例如

bla = np.array([(0, 2), (1, 0), (2, 1), (3, 2)])
duplicate = []

if np.sum(bla[:,1] == 2) > 1:
    duplicate = bla[bla[:,1] == 2].tolist()

print(duplicate)

输出:

[[0, 2], [3, 2]]