我正在尝试根据单词的长度(4到8个字符)逐行过滤单词列表。这样,如果输入文件具有:
输出文件为:
所以我有以下代码:
dir = "lower.lst"
dict = open(dir, 'r').readlines()
f=open('dictionary','w')
for word in dict:
if len(word)>=4 & len(word)<=8:
f.write(word)
f.close()
print(len(dict))
print(f)
但是输出文件保留所有单词。 顺便问一下,有没有更有效的方法来做到这一点?
答案 0 :(得分:2)
&
在Python中实际上仅是用于微动,请使用and
。and
,因为可以将比较链接起来。 (len(word)>=4 and len(word)<=8
等效于4 <= len(word) <= 8
)。.readlines()
,在这里我使用for line in fin:
。无论哪种方式,结果字符串都将以换行符结尾,因此您的长度测量值将减一。我通过在获取长度(len(line.strip())
)之前删除行来纠正此问题。 (您编写的代码应该省略'be'
,但保留'dog'
,因为它实际上是'dog\n'
,长度为4)。'communication\n'
和'be\n'
。我可以想象如果文件中的'be\n'
后面如果有多余的空格('be \n
'的长度为5,因为有两个空格),那么可能会保留它们。但是似乎没有逻辑的方法将'communication\n'
保留在您的输出文件中。您可能要仔细检查它是否确实存在。 with open('lower.lst', 'r') as fin, open('dictionary', 'w') as fout:
for line in fin:
if 4 <= len(line.strip()) <= 8:
fout.write(line)
答案 1 :(得分:1)
执行此操作有多种选择。
检查文档CountVectorizer。
假设您有一个名为 Function Last_NAS_Parse {
$Import_IP = Import-Csv -Path "$destination_RAW_NAS\audit_nas_8_$((Get-Date).ToString('yyyy-MM-dd')).txt" -Header @("date","infohostname","Version","SMTP","Value_1","Value_2","Value_3","Value_4","Value_5","Value_6","Value_7","Value_8","Value_9")
$Import_IP | ForEach-Object {
if ( [string]::IsNullOrWhiteSpace($_.infohostname)
}
的字符串列表,然后:
data
会返回:
data = ['hello', 'communication', 'be', 'dog', 'test']
filtered_list = filter(lambda x: len(x) > 4 and len(x) < 8, data)
print(filtered_list)
您可以更改lambda函数以过滤不同的条件。过滤器会“捕获”返回Python 3.6.1 (default, Dec 2015, 13:05:11)
[GCC 4.8.2] on linux
>
['hello']
的每个元素。
这可能是实现此目的的最短方法。只需要做:
True
答案 2 :(得分:0)
List comprehension确实允许您选择要从中构造列表的元素。这是一个示例实现:
....
ActionBar actionbar = getSupportActionBar();
try {
actionbar.setDisplayHomeAsUpEnabled(true);
actionbar.setHomeAsUpIndicator(R.drawable.icon_menu_white);
}
catch (NullPointerException err) {
err.printStackTrace();
}
...
输出:
s = """
hello
communication
be
dog
test
"""
lst = [elm for elm in s.split() if (len(elm) >= 4 and len(elm) <= 8)]
print(lst)
答案 3 :(得分:0)
这是您要找的吗?在这里,我使用带有new Foo();
保留字的文件上下文管理器,并且使用with
代替注释中指出的and
。
&
要知道它是否会完全按照您的意图格式化,这有点困难。
答案 4 :(得分:0)
如果将public function event()
{
return $this->belongsToMany('App\Models\Booky\EventsModel',
// Table name of the relationship's joining table.
'event_maps',
// Foreign key name of the model that you are joining to
'map_id'
// Foreign key name of the model on which you are defining the relationship
'event_id',
);
}
替换为&
,即:
and