首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python 2变量(如果唯一)

Python 2变量(如果唯一)
EN

Stack Overflow用户
提问于 2015-06-10 08:49:02
回答 2查看 101关注 0票数 0

如果两个变量是唯一的,则代码必须对它们进行计数。

但我不能让它开始工作。

有人知道我怎样才能让它起作用吗?

我想要的输出是:

代码语言:javascript
复制
C603 100nF 8

下面是.txt文件的一个小例子。

BaseBoard_V1.2_Componentlist.txt

代码语言:javascript
复制
C1                      1nF            C0603                 rcl                                    (24.7 35.9)           R270
C2                      100nF          C0603                 rcl                                    (36.7 32.7)           R180
C3                      10uF_Tantalum  C0603                 rcl                                    (22.7 6.45)           R0
C4                      22uF           C0603                 rcl                                    (25 8.25)             R90
C5                      1uF            C0603                 rcl                                    (22.6 21.85)          R180

代码:

代码语言:javascript
复制
from operator import itemgetter
from collections import Counter

elements = []

elements.append([])
elements.append([])
elements.append([])

with open('C:\\Python\\Artinis\\BaseBoard_V1.2_Componentslist.txt') as f:
    for i in xrange(10):
        f.next()
    for line in f:
        list = line.split();
        elements[0].append(list[0])
        elements[1].append(list[1])
        elements[2].append(list[2])

for value, package in sorted(zip(elements[1], elements[2])):
    input = value, package
    c = Counter( input )
    print ( c.items() )

输出:

代码语言:javascript
复制
[('0.22uF', 1), ('C0603', 1)]
[('100', 1), ('R0603', 1)]
[('100', 1), ('R0603', 1)]
[('100', 1), ('R0603', 1)]
[('100', 1), ('R0603', 1)]
[('C0603', 1), ('100nF', 1)]
[('C0603', 1), ('100nF', 1)]
[('C0603', 1), ('100nF', 1)]
[('C0603', 1), ('100nF', 1)]
[('C0603', 1), ('100nF', 1)]
[('C0603', 1), ('100nF', 1)]
[('C0603', 1), ('100nF', 1)]
[('C0603', 1), ('100nF', 1)]
[('10K', 1), ('R0603', 1)]
[('10K', 1), ('R0603', 1)]
[('10k', 1), ('R0603', 1)]
[('10uF_Tantalum', 1), ('C0603', 1)]
[('R0603', 1), ('19.6K', 1)]
[('1nF', 1), ('C0603', 1)]
[('C0603', 1), ('1uF', 1)]
[('2.2uF', 1), ('C0603', 1)]
[('2.2uF', 1), ('C0603', 1)]
[('R0603', 1), ('22K', 1)]
[('R0603', 1), ('22K', 1)]
[('22uF', 1), ('C0603', 1)]
[('R0603', 1), ('483', 1)]
[('53047-05', 2)]
[('ATMEGA32L-8MU', 1), ('QFN50P700X700X100-45N', 1)]

我试着在google上搜索,我尝试了其他的代码,但是它对我不起作用。有人知道怎么解决这个问题吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-10 09:20:16

如果要将第二个和第三个元素中的每个元素计数为单个元素,则使用itertools.islice提取第二个和第三个元素,并调用岛对象上的元组,使用生成器表达式将其传递给计数器。

代码语言:javascript
复制
from collections import Counter
from itertools import islice

with open('test.txt') as f:
    print(Counter(tuple(islice(line.split(), 1, 3)) for line in f))

示例的输出:

代码语言:javascript
复制
Counter({('10uF_Tantalum', 'C0603'): 1, ('22uF', 'C0603'): 1, ('1nF', 'C0603'): 1, ('100nF', 'C0603'): 1, ('1uF', 'C0603'): 1})

如果您想要更好的输出,请使用str.format并迭代:

代码语言:javascript
复制
with open('test.txt') as f:
    cn = Counter(tuple(islice(line.split(), 1, 3)) for line in f)
    for k, v in cn.items():
        print("{} {} {v}".format(*k, v=v))

输出:

代码语言:javascript
复制
10uF_Tantalum C0603 1
22uF C0603 1
1nF C0603 1
100nF C0603 1
1uF C0603 
票数 1
EN

Stack Overflow用户

发布于 2015-06-10 09:08:19

如果我们已经以这种方式组织了数据:

代码语言:javascript
复制
elements = [
    ("a", "b"),
    ("c", "d"),
    ("a", "b"),
    ("c", "d"),
    ("a", "b"),
]

我们可以创建一组独特的元素:

代码语言:javascript
复制
elset = set(elements)

然后显示每个唯一元素在原始列表中出现的次数:

代码语言:javascript
复制
for e in elset:
    print e[0], e[1], elements.count(e)
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30751456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档