从列表列表中的列表中删除字符串

时间:2018-05-10 14:23:22

标签: python

我试图在一个小的本地测试中尝试实现的是迭代一个字符串数组,这些字符串基本上是父数组中的字符串数组。

我试图实现以下目标......

  • 1)获取父数组中的第一个数组
  • 2)获取列表的其余部分而不采取
  • 3)遍历采集的数组,所以我采用每个字符串
  • 4)查找所有其余数组中的每个字符串
  • 5)如果找到,请将其从阵列中删除

到目前为止,我已经尝试了以下方法,但我正在努力解决一个我不知道它来自哪里的错误...

lines = map(lambda l: str.replace(l, "\n", ""),
            list(open("PATH", 'r')))

splitLines = map(lambda l: l.split(','), lines)

for line in splitLines:
    for keyword in line:
        print(list(splitLines).remove(keyword))

但我收到以下错误......

ValueError: list.remove(x): x not in list

' x'不是任何给定测试数组中包含的字符串。

SAMPLE INPUT(文本文件中以逗号分隔的行,所以每行得到一个字符串数组):

[['a', 'b', 'c'], ['e', 'f', 'g'], ['b', 'q', 'a']]

示例输出:

[['a', 'b', 'c'], ['e', 'f', 'g'], ['q']]

2 个答案:

答案 0 :(得分:2)

您可以使用set跟踪以前看到的字符串以进行快速查找,并使用简单的列表推导来添加之前看到的set中找不到的元素。

prev = set()
final = []
for i in x:
  final.append([j for j in i if j not in prev])
  prev = prev.union(set(i))

print(final)

输出:

[['a', 'b', 'c'], ['e', 'f', 'g'], ['q']]

答案 1 :(得分:1)

inputlist = [['a', 'b', 'c'], ['e', 'f', 'g'], ['b', 'q', 'a']]
scanned=[]

res=[]
for i in inputlist:
    temp=[]
    for j in i:
        if j in scanned:
            pass
        else:
            scanned.append(j)
            temp.append(j)
    res.append(temp)
[['a', 'b', 'c'], ['e', 'f', 'g'], ['q']]