选择需要的项目并分组(Python 2.7.15)

时间:2019-03-20 09:06:10

标签: python python-2.7

我有如下代码:

Microsoft.EntityFrameworkCore.Design

结果为a = [[0, 'CN1101'], [1, 'CN1602'], [2, 'CN1601']] b = [[0, 'CN1601'], [1, 'CN1101'], [2, 'CN1101'], [3, 'CN1602']] c = [] d = [] for i in range(len(a)): for j in range(len(b)): if a[i][1] == b[j][1]: c.append(b[j][0]) d.append(c)
我想要结果d = [[1, 2, 3, 0], [1, 2, 3, 0], [1, 2, 3, 0]]。您将如何编码?

3 个答案:

答案 0 :(得分:0)

我会这样看:

a = ['CN1101', 'CN1602', 'CN1601']   
b = ['CN1601', 'CN1101', 'CN1101', 'CN1602']   
d = {}

for i in range (0, len(a)):
    d[i] = [j for j in range(0, len(b)) if b[j] == a[i]]
print d

您想将第二个列表中的索引链接到第一个列表中的定义,我认为使用字典更适合您的情况。请注意,该程序仍将在O(N^2)中运行。在这种情况下,输出为:

{0: [1, 2], 1: [3], 2: [0]}

请注意,将行更改为:

d[a[i]] = [j for j in range(0, len(b)) if b[j] == a[i]]

将产生产量:

{'CN1101': [1, 2], 'CN1601': [0], 'CN1602': [3]}

如果列表是您想要的而不是字典,那么这将是您的解决方案:

a = ['CN1101', 'CN1602', 'CN1601']   
b = ['CN1601', 'CN1101', 'CN1101', 'CN1602']   
d = []

for i in range (0, len(a)):
    d.append([j for j in range(0, len(b)) if b[j] == a[i]])
print d

输出为:

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

请在此处阅读更多信息

https://docs.python.org/2/tutorial/datastructures.html#dictionaries

答案 1 :(得分:0)

我们首先构建一个包含b数据的字典,并以refs作为键。 然后我们可以建立您的输出。

通过这种方式,我们在每个列表上仅迭代一次。

from collections import defaultdict

a = [[0, 'CN1101'], [1, 'CN1602'], [2, 'CN1601']]   
b = [[0, 'CN1601'], [1, 'CN1101'], [2, 'CN1101'], [3, 'CN1602']]  

bd = defaultdict(list)
for num, ref in b:
    bd[ref].append(num)

# bd will now be  {'CN1601': [0], 'CN1101': [1, 2], 'CN1602': [3]}

out = [bd[ref] for num, ref in a]
print(out)
# [[1, 2], [3], [0]]

答案 2 :(得分:0)

感谢您的回答。 我还有其他代码供您参考。

a = [[0, 'CN1101'], [1, 'CN1602'], [2, 'CN1601']]
b = [[0, 'CN1601'], [1, 'CN1101'], [2, 'CN1101'], [3, 'CN1602']]
d = []
    for i in range(0,len(a),1):
        locals()['rowy%s' %i] = []
        for j in range(0,len(b),1):
            if a[i][1] == b[j][1]:
                locals()['rowx%s' %j] = b[j][0]
            elif a[i][1] != b[j][1]:
                continue
            locals()['rowy%s' %i].append(locals()['rowx%s' %j])
        d.append(locals()['rowy%s' %i])`