我正在尝试编写一个代码,用于比较每个元组的第二个元素,并提取包含第二个元素重复项的元组。
例如,如果我有
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语法令人沮丧。我应该如何解决这个问题?
答案 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]]