Filter list by length of words
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}
I am trying to filter a list where there are words line by line, by the length of the word(between 4 and 8 characters). So that if the input file has:
- hello
- communication
- be
- dog
- test
The output file is:
- hello
- test
So I have this code:
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)
But the output file keeps all the words.
By the way is there any more efficient way to do this?
python list filter
add a comment |
I am trying to filter a list where there are words line by line, by the length of the word(between 4 and 8 characters). So that if the input file has:
- hello
- communication
- be
- dog
- test
The output file is:
- hello
- test
So I have this code:
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)
But the output file keeps all the words.
By the way is there any more efficient way to do this?
python list filter
4
&
is a C-ism (or Java, or JavaScript). Python usesand
.
– usr2564301
Nov 23 '18 at 19:00
Possible duplicate of Using the AND and NOT Operator in Python
– usr2564301
Nov 23 '18 at 19:02
2
Don't usedict
as variable name.
– Austin
Nov 23 '18 at 19:03
add a comment |
I am trying to filter a list where there are words line by line, by the length of the word(between 4 and 8 characters). So that if the input file has:
- hello
- communication
- be
- dog
- test
The output file is:
- hello
- test
So I have this code:
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)
But the output file keeps all the words.
By the way is there any more efficient way to do this?
python list filter
I am trying to filter a list where there are words line by line, by the length of the word(between 4 and 8 characters). So that if the input file has:
- hello
- communication
- be
- dog
- test
The output file is:
- hello
- test
So I have this code:
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)
But the output file keeps all the words.
By the way is there any more efficient way to do this?
python list filter
python list filter
asked Nov 23 '18 at 18:57
Tecno DroneTecno Drone
61
61
4
&
is a C-ism (or Java, or JavaScript). Python usesand
.
– usr2564301
Nov 23 '18 at 19:00
Possible duplicate of Using the AND and NOT Operator in Python
– usr2564301
Nov 23 '18 at 19:02
2
Don't usedict
as variable name.
– Austin
Nov 23 '18 at 19:03
add a comment |
4
&
is a C-ism (or Java, or JavaScript). Python usesand
.
– usr2564301
Nov 23 '18 at 19:00
Possible duplicate of Using the AND and NOT Operator in Python
– usr2564301
Nov 23 '18 at 19:02
2
Don't usedict
as variable name.
– Austin
Nov 23 '18 at 19:03
4
4
&
is a C-ism (or Java, or JavaScript). Python uses and
.– usr2564301
Nov 23 '18 at 19:00
&
is a C-ism (or Java, or JavaScript). Python uses and
.– usr2564301
Nov 23 '18 at 19:00
Possible duplicate of Using the AND and NOT Operator in Python
– usr2564301
Nov 23 '18 at 19:02
Possible duplicate of Using the AND and NOT Operator in Python
– usr2564301
Nov 23 '18 at 19:02
2
2
Don't use
dict
as variable name.– Austin
Nov 23 '18 at 19:03
Don't use
dict
as variable name.– Austin
Nov 23 '18 at 19:03
add a comment |
5 Answers
5
active
oldest
votes
- Use the with-statement to automatically close files (even with exceptions are encountered).
&
in Python is really for bit twiddling only, useand
.- You don't actually need
and
, because comparisons can be chained. (len(word)>=4 and len(word)<=8
is equivalent to4 <= len(word) <= 8
). - In your question you use
.readlines()
and here I usefor line in fin:
. Either way the resulting strings will end in newline characters, so your length measurements will be off by one. I correct for this by stripping the line before taking the length (len(line.strip())
). (Your code as written should have omitted'be'
, but kept'dog'
, because it's really'dogn'
which has a length of 4). - You said your code kept all of the words. To my eye your code should have worked to omit
'communicationn'
and'ben'
. I could imagine that'ben'
might be kept if there were extra spaces after it in the file ('be n
' has a length of 5 because of the two spaces). But there seems to be no logical way that'communicationn'
would be kept in your output file. You may want to double check that it really was there.
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)
Nifty way of opening the 2 files at once, but shouldn't you usereadlines()
beforefor line in fin:
?
– Pedro Lobito
Nov 23 '18 at 19:20
@PedroLobito: Files iterate by line.readlines()
buffers all the lines into a list first, but if all you're going to do is iterate over that list you should just cutout the middleman and iterate directly. This is especially important if the file is larger than working memory. (Both methods will give lines that include the newline at the end. That impacts this problem.)
– Steven Rumbalski
Nov 23 '18 at 19:24
add a comment |
There are more than one choice to do this.
- With filter() built-in function
Check the docs here.
Let's suppose you have list of strings called data
, then:
data = ['hello', 'communication', 'be', 'dog', 'test']
filtered_list = filter(lambda x: len(x) > 4 and len(x) < 8, data)
print(filtered_list)
Will return:
Python 3.6.1 (default, Dec 2015, 13:05:11)
[GCC 4.8.2] on linux
>
['hello']
You can change the lambda function to filter different conditions. Filter will "catch" every element that returns True
.
- With list-comprehension
This is probably the shortest way to achieve this. Just need to do:
filtered_list = [x for x in data if len(x) > 4 and len(x) < 8]
When the OP wrote "between 4 and 8 characters" I believe he meant that as having inclusive endpoints so that word lengths of 4 and 8 would also be preserved. If so, your>
and<
should be>=
and<=
. Also a clearer way to write that is4 <= len(x) <= 8
without theand
. Finally, it would be worth mentioning in your answer that the OP has an additional bug because he's reading from file. His words have newlines at the end, so his length measurements are off by one.
– Steven Rumbalski
Nov 23 '18 at 19:43
add a comment |
List comprehension does let you choose which elements you want to construct your list from. Here's an example implementation:
s = """
hello
communication
be
dog
test
"""
lst = [elm for elm in s.split() if (len(elm) >= 4 and len(elm) <= 8)]
print(lst)
Output:
['hello', 'test']
add a comment |
Is this what you're looking for? Here I use file context managers with the with
reserved word, and I use and
instead of &
as noted in the comments.
with open("lower.lst", "r") as f:
o = [word for word in f if (len(word) >= 4 and len(word) <= 8)]
with open("outfile.lst", "w") as f:
f.write(o)
It's a bit tough to know if this will format exactly to your intentions in the outfile.
add a comment |
Your code should work if you replace &
for and
, i.e:
dict = open("lower.lst", 'r').readlines()
with open('dictionary','w') as f:
for word in dict:
if len(word)>=4 and len(word)<=8:
f.write(word)
readlines()
preserves the newlines, so the length test will need to account for that:if 4 <= len(word.strip()) <= 8:
. This also impacts the write:f.write(word)
.
– Steven Rumbalski
Nov 23 '18 at 19:11
I used alist
as example... thank you for pointing that.
– Pedro Lobito
Nov 23 '18 at 19:11
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53451761%2ffilter-list-by-length-of-words%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
5 Answers
5
active
oldest
votes
5 Answers
5
active
oldest
votes
active
oldest
votes
active
oldest
votes
- Use the with-statement to automatically close files (even with exceptions are encountered).
&
in Python is really for bit twiddling only, useand
.- You don't actually need
and
, because comparisons can be chained. (len(word)>=4 and len(word)<=8
is equivalent to4 <= len(word) <= 8
). - In your question you use
.readlines()
and here I usefor line in fin:
. Either way the resulting strings will end in newline characters, so your length measurements will be off by one. I correct for this by stripping the line before taking the length (len(line.strip())
). (Your code as written should have omitted'be'
, but kept'dog'
, because it's really'dogn'
which has a length of 4). - You said your code kept all of the words. To my eye your code should have worked to omit
'communicationn'
and'ben'
. I could imagine that'ben'
might be kept if there were extra spaces after it in the file ('be n
' has a length of 5 because of the two spaces). But there seems to be no logical way that'communicationn'
would be kept in your output file. You may want to double check that it really was there.
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)
Nifty way of opening the 2 files at once, but shouldn't you usereadlines()
beforefor line in fin:
?
– Pedro Lobito
Nov 23 '18 at 19:20
@PedroLobito: Files iterate by line.readlines()
buffers all the lines into a list first, but if all you're going to do is iterate over that list you should just cutout the middleman and iterate directly. This is especially important if the file is larger than working memory. (Both methods will give lines that include the newline at the end. That impacts this problem.)
– Steven Rumbalski
Nov 23 '18 at 19:24
add a comment |
- Use the with-statement to automatically close files (even with exceptions are encountered).
&
in Python is really for bit twiddling only, useand
.- You don't actually need
and
, because comparisons can be chained. (len(word)>=4 and len(word)<=8
is equivalent to4 <= len(word) <= 8
). - In your question you use
.readlines()
and here I usefor line in fin:
. Either way the resulting strings will end in newline characters, so your length measurements will be off by one. I correct for this by stripping the line before taking the length (len(line.strip())
). (Your code as written should have omitted'be'
, but kept'dog'
, because it's really'dogn'
which has a length of 4). - You said your code kept all of the words. To my eye your code should have worked to omit
'communicationn'
and'ben'
. I could imagine that'ben'
might be kept if there were extra spaces after it in the file ('be n
' has a length of 5 because of the two spaces). But there seems to be no logical way that'communicationn'
would be kept in your output file. You may want to double check that it really was there.
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)
Nifty way of opening the 2 files at once, but shouldn't you usereadlines()
beforefor line in fin:
?
– Pedro Lobito
Nov 23 '18 at 19:20
@PedroLobito: Files iterate by line.readlines()
buffers all the lines into a list first, but if all you're going to do is iterate over that list you should just cutout the middleman and iterate directly. This is especially important if the file is larger than working memory. (Both methods will give lines that include the newline at the end. That impacts this problem.)
– Steven Rumbalski
Nov 23 '18 at 19:24
add a comment |
- Use the with-statement to automatically close files (even with exceptions are encountered).
&
in Python is really for bit twiddling only, useand
.- You don't actually need
and
, because comparisons can be chained. (len(word)>=4 and len(word)<=8
is equivalent to4 <= len(word) <= 8
). - In your question you use
.readlines()
and here I usefor line in fin:
. Either way the resulting strings will end in newline characters, so your length measurements will be off by one. I correct for this by stripping the line before taking the length (len(line.strip())
). (Your code as written should have omitted'be'
, but kept'dog'
, because it's really'dogn'
which has a length of 4). - You said your code kept all of the words. To my eye your code should have worked to omit
'communicationn'
and'ben'
. I could imagine that'ben'
might be kept if there were extra spaces after it in the file ('be n
' has a length of 5 because of the two spaces). But there seems to be no logical way that'communicationn'
would be kept in your output file. You may want to double check that it really was there.
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)
- Use the with-statement to automatically close files (even with exceptions are encountered).
&
in Python is really for bit twiddling only, useand
.- You don't actually need
and
, because comparisons can be chained. (len(word)>=4 and len(word)<=8
is equivalent to4 <= len(word) <= 8
). - In your question you use
.readlines()
and here I usefor line in fin:
. Either way the resulting strings will end in newline characters, so your length measurements will be off by one. I correct for this by stripping the line before taking the length (len(line.strip())
). (Your code as written should have omitted'be'
, but kept'dog'
, because it's really'dogn'
which has a length of 4). - You said your code kept all of the words. To my eye your code should have worked to omit
'communicationn'
and'ben'
. I could imagine that'ben'
might be kept if there were extra spaces after it in the file ('be n
' has a length of 5 because of the two spaces). But there seems to be no logical way that'communicationn'
would be kept in your output file. You may want to double check that it really was there.
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)
edited Nov 23 '18 at 19:35
answered Nov 23 '18 at 19:13
Steven RumbalskiSteven Rumbalski
33.9k66095
33.9k66095
Nifty way of opening the 2 files at once, but shouldn't you usereadlines()
beforefor line in fin:
?
– Pedro Lobito
Nov 23 '18 at 19:20
@PedroLobito: Files iterate by line.readlines()
buffers all the lines into a list first, but if all you're going to do is iterate over that list you should just cutout the middleman and iterate directly. This is especially important if the file is larger than working memory. (Both methods will give lines that include the newline at the end. That impacts this problem.)
– Steven Rumbalski
Nov 23 '18 at 19:24
add a comment |
Nifty way of opening the 2 files at once, but shouldn't you usereadlines()
beforefor line in fin:
?
– Pedro Lobito
Nov 23 '18 at 19:20
@PedroLobito: Files iterate by line.readlines()
buffers all the lines into a list first, but if all you're going to do is iterate over that list you should just cutout the middleman and iterate directly. This is especially important if the file is larger than working memory. (Both methods will give lines that include the newline at the end. That impacts this problem.)
– Steven Rumbalski
Nov 23 '18 at 19:24
Nifty way of opening the 2 files at once, but shouldn't you use
readlines()
before for line in fin:
?– Pedro Lobito
Nov 23 '18 at 19:20
Nifty way of opening the 2 files at once, but shouldn't you use
readlines()
before for line in fin:
?– Pedro Lobito
Nov 23 '18 at 19:20
@PedroLobito: Files iterate by line.
readlines()
buffers all the lines into a list first, but if all you're going to do is iterate over that list you should just cutout the middleman and iterate directly. This is especially important if the file is larger than working memory. (Both methods will give lines that include the newline at the end. That impacts this problem.)– Steven Rumbalski
Nov 23 '18 at 19:24
@PedroLobito: Files iterate by line.
readlines()
buffers all the lines into a list first, but if all you're going to do is iterate over that list you should just cutout the middleman and iterate directly. This is especially important if the file is larger than working memory. (Both methods will give lines that include the newline at the end. That impacts this problem.)– Steven Rumbalski
Nov 23 '18 at 19:24
add a comment |
There are more than one choice to do this.
- With filter() built-in function
Check the docs here.
Let's suppose you have list of strings called data
, then:
data = ['hello', 'communication', 'be', 'dog', 'test']
filtered_list = filter(lambda x: len(x) > 4 and len(x) < 8, data)
print(filtered_list)
Will return:
Python 3.6.1 (default, Dec 2015, 13:05:11)
[GCC 4.8.2] on linux
>
['hello']
You can change the lambda function to filter different conditions. Filter will "catch" every element that returns True
.
- With list-comprehension
This is probably the shortest way to achieve this. Just need to do:
filtered_list = [x for x in data if len(x) > 4 and len(x) < 8]
When the OP wrote "between 4 and 8 characters" I believe he meant that as having inclusive endpoints so that word lengths of 4 and 8 would also be preserved. If so, your>
and<
should be>=
and<=
. Also a clearer way to write that is4 <= len(x) <= 8
without theand
. Finally, it would be worth mentioning in your answer that the OP has an additional bug because he's reading from file. His words have newlines at the end, so his length measurements are off by one.
– Steven Rumbalski
Nov 23 '18 at 19:43
add a comment |
There are more than one choice to do this.
- With filter() built-in function
Check the docs here.
Let's suppose you have list of strings called data
, then:
data = ['hello', 'communication', 'be', 'dog', 'test']
filtered_list = filter(lambda x: len(x) > 4 and len(x) < 8, data)
print(filtered_list)
Will return:
Python 3.6.1 (default, Dec 2015, 13:05:11)
[GCC 4.8.2] on linux
>
['hello']
You can change the lambda function to filter different conditions. Filter will "catch" every element that returns True
.
- With list-comprehension
This is probably the shortest way to achieve this. Just need to do:
filtered_list = [x for x in data if len(x) > 4 and len(x) < 8]
When the OP wrote "between 4 and 8 characters" I believe he meant that as having inclusive endpoints so that word lengths of 4 and 8 would also be preserved. If so, your>
and<
should be>=
and<=
. Also a clearer way to write that is4 <= len(x) <= 8
without theand
. Finally, it would be worth mentioning in your answer that the OP has an additional bug because he's reading from file. His words have newlines at the end, so his length measurements are off by one.
– Steven Rumbalski
Nov 23 '18 at 19:43
add a comment |
There are more than one choice to do this.
- With filter() built-in function
Check the docs here.
Let's suppose you have list of strings called data
, then:
data = ['hello', 'communication', 'be', 'dog', 'test']
filtered_list = filter(lambda x: len(x) > 4 and len(x) < 8, data)
print(filtered_list)
Will return:
Python 3.6.1 (default, Dec 2015, 13:05:11)
[GCC 4.8.2] on linux
>
['hello']
You can change the lambda function to filter different conditions. Filter will "catch" every element that returns True
.
- With list-comprehension
This is probably the shortest way to achieve this. Just need to do:
filtered_list = [x for x in data if len(x) > 4 and len(x) < 8]
There are more than one choice to do this.
- With filter() built-in function
Check the docs here.
Let's suppose you have list of strings called data
, then:
data = ['hello', 'communication', 'be', 'dog', 'test']
filtered_list = filter(lambda x: len(x) > 4 and len(x) < 8, data)
print(filtered_list)
Will return:
Python 3.6.1 (default, Dec 2015, 13:05:11)
[GCC 4.8.2] on linux
>
['hello']
You can change the lambda function to filter different conditions. Filter will "catch" every element that returns True
.
- With list-comprehension
This is probably the shortest way to achieve this. Just need to do:
filtered_list = [x for x in data if len(x) > 4 and len(x) < 8]
edited Nov 23 '18 at 19:14
answered Nov 23 '18 at 19:02
ChecheCheche
823219
823219
When the OP wrote "between 4 and 8 characters" I believe he meant that as having inclusive endpoints so that word lengths of 4 and 8 would also be preserved. If so, your>
and<
should be>=
and<=
. Also a clearer way to write that is4 <= len(x) <= 8
without theand
. Finally, it would be worth mentioning in your answer that the OP has an additional bug because he's reading from file. His words have newlines at the end, so his length measurements are off by one.
– Steven Rumbalski
Nov 23 '18 at 19:43
add a comment |
When the OP wrote "between 4 and 8 characters" I believe he meant that as having inclusive endpoints so that word lengths of 4 and 8 would also be preserved. If so, your>
and<
should be>=
and<=
. Also a clearer way to write that is4 <= len(x) <= 8
without theand
. Finally, it would be worth mentioning in your answer that the OP has an additional bug because he's reading from file. His words have newlines at the end, so his length measurements are off by one.
– Steven Rumbalski
Nov 23 '18 at 19:43
When the OP wrote "between 4 and 8 characters" I believe he meant that as having inclusive endpoints so that word lengths of 4 and 8 would also be preserved. If so, your
>
and <
should be >=
and <=
. Also a clearer way to write that is 4 <= len(x) <= 8
without the and
. Finally, it would be worth mentioning in your answer that the OP has an additional bug because he's reading from file. His words have newlines at the end, so his length measurements are off by one.– Steven Rumbalski
Nov 23 '18 at 19:43
When the OP wrote "between 4 and 8 characters" I believe he meant that as having inclusive endpoints so that word lengths of 4 and 8 would also be preserved. If so, your
>
and <
should be >=
and <=
. Also a clearer way to write that is 4 <= len(x) <= 8
without the and
. Finally, it would be worth mentioning in your answer that the OP has an additional bug because he's reading from file. His words have newlines at the end, so his length measurements are off by one.– Steven Rumbalski
Nov 23 '18 at 19:43
add a comment |
List comprehension does let you choose which elements you want to construct your list from. Here's an example implementation:
s = """
hello
communication
be
dog
test
"""
lst = [elm for elm in s.split() if (len(elm) >= 4 and len(elm) <= 8)]
print(lst)
Output:
['hello', 'test']
add a comment |
List comprehension does let you choose which elements you want to construct your list from. Here's an example implementation:
s = """
hello
communication
be
dog
test
"""
lst = [elm for elm in s.split() if (len(elm) >= 4 and len(elm) <= 8)]
print(lst)
Output:
['hello', 'test']
add a comment |
List comprehension does let you choose which elements you want to construct your list from. Here's an example implementation:
s = """
hello
communication
be
dog
test
"""
lst = [elm for elm in s.split() if (len(elm) >= 4 and len(elm) <= 8)]
print(lst)
Output:
['hello', 'test']
List comprehension does let you choose which elements you want to construct your list from. Here's an example implementation:
s = """
hello
communication
be
dog
test
"""
lst = [elm for elm in s.split() if (len(elm) >= 4 and len(elm) <= 8)]
print(lst)
Output:
['hello', 'test']
answered Nov 23 '18 at 19:03
AyxanAyxan
2,347722
2,347722
add a comment |
add a comment |
Is this what you're looking for? Here I use file context managers with the with
reserved word, and I use and
instead of &
as noted in the comments.
with open("lower.lst", "r") as f:
o = [word for word in f if (len(word) >= 4 and len(word) <= 8)]
with open("outfile.lst", "w") as f:
f.write(o)
It's a bit tough to know if this will format exactly to your intentions in the outfile.
add a comment |
Is this what you're looking for? Here I use file context managers with the with
reserved word, and I use and
instead of &
as noted in the comments.
with open("lower.lst", "r") as f:
o = [word for word in f if (len(word) >= 4 and len(word) <= 8)]
with open("outfile.lst", "w") as f:
f.write(o)
It's a bit tough to know if this will format exactly to your intentions in the outfile.
add a comment |
Is this what you're looking for? Here I use file context managers with the with
reserved word, and I use and
instead of &
as noted in the comments.
with open("lower.lst", "r") as f:
o = [word for word in f if (len(word) >= 4 and len(word) <= 8)]
with open("outfile.lst", "w") as f:
f.write(o)
It's a bit tough to know if this will format exactly to your intentions in the outfile.
Is this what you're looking for? Here I use file context managers with the with
reserved word, and I use and
instead of &
as noted in the comments.
with open("lower.lst", "r") as f:
o = [word for word in f if (len(word) >= 4 and len(word) <= 8)]
with open("outfile.lst", "w") as f:
f.write(o)
It's a bit tough to know if this will format exactly to your intentions in the outfile.
answered Nov 23 '18 at 19:03
Charles LandauCharles Landau
2,8031317
2,8031317
add a comment |
add a comment |
Your code should work if you replace &
for and
, i.e:
dict = open("lower.lst", 'r').readlines()
with open('dictionary','w') as f:
for word in dict:
if len(word)>=4 and len(word)<=8:
f.write(word)
readlines()
preserves the newlines, so the length test will need to account for that:if 4 <= len(word.strip()) <= 8:
. This also impacts the write:f.write(word)
.
– Steven Rumbalski
Nov 23 '18 at 19:11
I used alist
as example... thank you for pointing that.
– Pedro Lobito
Nov 23 '18 at 19:11
add a comment |
Your code should work if you replace &
for and
, i.e:
dict = open("lower.lst", 'r').readlines()
with open('dictionary','w') as f:
for word in dict:
if len(word)>=4 and len(word)<=8:
f.write(word)
readlines()
preserves the newlines, so the length test will need to account for that:if 4 <= len(word.strip()) <= 8:
. This also impacts the write:f.write(word)
.
– Steven Rumbalski
Nov 23 '18 at 19:11
I used alist
as example... thank you for pointing that.
– Pedro Lobito
Nov 23 '18 at 19:11
add a comment |
Your code should work if you replace &
for and
, i.e:
dict = open("lower.lst", 'r').readlines()
with open('dictionary','w') as f:
for word in dict:
if len(word)>=4 and len(word)<=8:
f.write(word)
Your code should work if you replace &
for and
, i.e:
dict = open("lower.lst", 'r').readlines()
with open('dictionary','w') as f:
for word in dict:
if len(word)>=4 and len(word)<=8:
f.write(word)
edited Nov 23 '18 at 19:12
answered Nov 23 '18 at 19:07
Pedro LobitoPedro Lobito
50.9k16138172
50.9k16138172
readlines()
preserves the newlines, so the length test will need to account for that:if 4 <= len(word.strip()) <= 8:
. This also impacts the write:f.write(word)
.
– Steven Rumbalski
Nov 23 '18 at 19:11
I used alist
as example... thank you for pointing that.
– Pedro Lobito
Nov 23 '18 at 19:11
add a comment |
readlines()
preserves the newlines, so the length test will need to account for that:if 4 <= len(word.strip()) <= 8:
. This also impacts the write:f.write(word)
.
– Steven Rumbalski
Nov 23 '18 at 19:11
I used alist
as example... thank you for pointing that.
– Pedro Lobito
Nov 23 '18 at 19:11
readlines()
preserves the newlines, so the length test will need to account for that: if 4 <= len(word.strip()) <= 8:
. This also impacts the write: f.write(word)
.– Steven Rumbalski
Nov 23 '18 at 19:11
readlines()
preserves the newlines, so the length test will need to account for that: if 4 <= len(word.strip()) <= 8:
. This also impacts the write: f.write(word)
.– Steven Rumbalski
Nov 23 '18 at 19:11
I used a
list
as example... thank you for pointing that.– Pedro Lobito
Nov 23 '18 at 19:11
I used a
list
as example... thank you for pointing that.– Pedro Lobito
Nov 23 '18 at 19:11
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53451761%2ffilter-list-by-length-of-words%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
4
&
is a C-ism (or Java, or JavaScript). Python usesand
.– usr2564301
Nov 23 '18 at 19:00
Possible duplicate of Using the AND and NOT Operator in Python
– usr2564301
Nov 23 '18 at 19:02
2
Don't use
dict
as variable name.– Austin
Nov 23 '18 at 19:03