Python:从列表中删除列并存储为列表

时间:2014-10-24 04:06:31

标签: python

PyNoob签入,尝试使用python获取更多代表并停止使用这么多bash。我有一个csv文件,其中包含许多行'devicename; port; portchannel',我已将其读入我认为是下面的列表。

['deviceA;portZ;portchanC', 'device1;port3;portchan1', 'deviceA;port3;portchan1',  'deviceD;portR;portchanE', 'device2;portG;portchan1', 'deviceB;portZ;portchan1', 'deviceE;portX;portchan2']

现在我要做的是从列表中的每个字符串中剥离(剪切?)第一个元素(由';'分隔)并将其存储到新列表中。我也想独一无二。我尝试了很多不同的代码示例,我在这里找到了类似的问题,但还没有找到有用的东西。

期望的输出将是

a = ['deviceA', 'device1', 'deviceD', 'device2', 'deviceB', 'deviceE']

感谢帮助!

3 个答案:

答案 0 :(得分:1)

list = ['deviceA;portZ,portchanC', ... , 'deviceE;portX,portchan2']    
output = [ele.split(';')[0] for ele in list]
uniques = set(output)

这应该可以满足您的需求。如果你想了解发生了什么,请继续阅读。

somestring.split('delimiter')将返回字符串数组,[0]将获取第一个元素。因此'deviceA;portZ,portchanC'.split(';')将返回['deviceA','portZ' ,'portchanC']。因此'deviceA;portZ;portchanC'.split(';')将为您提供'deviceA'

for ele in list将迭代列表中的每个项目,并将其分配给名为ele的变量。所以这段代码的作用是遍历列表,将每个项目拆分为&#39 ;;',返回第一部分,并将它们全部放在一个列表中。最后一行将为您提供该列表中的唯一集合。


另一种选择,更多"初学者"也可以这样做的方式如下,它与你在其他语言中看到的相似。两种方法都有效。在下面,我们创建一个空列表a。然后我们遍历您的列表,拆分它,将结果存储在device中,然后获取该列表的第一个元素(这将是;之前的字符串并追加/推/添加到{ {1}}:

a

答案 1 :(得分:1)

list(set([l.split[';'][0] for l in a]))

list(set(map(lambda l: l.split[';'][0], a)))

答案 2 :(得分:1)

import csv

with open('path/to/file') as infile:
    answer = []
    for row in csv.reader(infile, delimiter=';'):
        answer.append(row[0])

这将为您提供没有uniq的所有设备名称。以下内容uniq,但您可能会丢失它们在文件中的显示顺序:

import csv

with open('path/to/file') as infile:
    answer = set()
    for row in csv.reader(infile, delimiter=';'):
        answer.add(row[0])

如果你想维持原来的订单,你将不得不做一些繁重的工作:

import csv

with open('path/to/file') as infile:
    answer = []
    seen = set()
    for row in csv.reader(infile, delimiter=';'):
        dev = row[0]
        if dev not in seen:
            seen.add(dev)
            answer.append(dev)