0

リストの要素を確認することはできますか? 「test01.txt」と同じ単語が含まれている場合は、スペースに置き換えますか?

test01.txt:

to
her
too
a
for

コード内:

with open('C:/test01.txt') as words:
    ws = words.read().splitlines()
with open('C:/test02.txt') as file_modify4:
    for x in file_modify4:
        sx = map(str.strip, x.split("\t"))
        ssx = sx[0].split(" ")
        print ssx

「print ssx」の結果:

['wow']
['listens', 'to', 'her', 'music']
['too', 'good']
['a', 'film', 'for', 'stunt', 'scheduling', 'i', 'think']
['really', 'enjoyed']

ssxの要素を置き換えるには?

期待される結果:

['wow']
['listens', ' ', ' ', 'music']
[' ', 'good']
[' ', 'film', ' ', 'stunt', 'scheduling', 'i', 'think']
['really', 'enjoyed']

なにか提案を?

4

2 に答える 2

3

リスト内包表記を使用します。テストを高速化するために、最初に単語をセットに保存します。

ws = set(ws)

# ...
    ssx = [w if w not in ws else ' ' for w in ssx]    

または、完全なソリューションとして:

with open('C:/test01.txt') as words:
    ws = set(words.read().splitlines())

with open('C:/test02.txt') as file_modify4:
    for x in file_modify4:
        ssx = [w if w not in ws else ' ' for w in x.strip().split('\t')[0].split()]
        print ssx
于 2013-01-06T12:39:21.813 に答える
1

素朴な解決策は次のとおりです。

new_ssx = []
for word in ssx:
    if word in ws:
        new_ssx.append(' ')
    else:
        new_ssx.append(word)

もちろん、ループで追加するだけの空のリストがある場合はいつでも、それをリスト内包表記に変えることができます。

new_ssx = [' ' if word in ws else word for word in ssx]

wsが数語以上の場合はset、ルックアップを高速化するために に変更する必要があります。

したがって、すべてをまとめると、次のようになります。

with open('C:/test01.txt') as words:
    ws = set(words.read().splitlines())
with open('C:/test02.txt') as file_modify4:
    for x in file_modify4:
        sx = map(str.strip, x.split("\t"))
        ssx = sx[0].split(" ")
        new_ssx = [' ' if word in ws else word for word in ssx]
        print new_ssx
于 2013-01-06T12:43:15.667 に答える