-5

I wanna delete the values of the list

lists = [12,15,15,15,3,15,1,6,4,7,888,56248]
while len(lists) is True:
    lists.pop()
print(lists)

But i got this output :

[12, 15, 15, 15, 3, 15, 1, 6, 4, 7, 888, 56248]
7
  • 7
    len(lists) is an integer. An integer is never the same object as the Boolean singleton True. Perhaps you meant just while lists? Commented Dec 6, 2017 at 18:17
  • 1
    @Matthias agreed and hammered open. The duplicate is talking about iterating over a list while mutating it. This is simply misunderstanding a conditional. Commented Dec 6, 2017 at 18:23
  • 2
    You could use while lists: lists.pop(). The better solution would be lists = []. If it has to be the same list (with the same id) use lists[:] = []. Commented Dec 6, 2017 at 18:24
  • 4
    @Matthias lists.clear() Commented Dec 6, 2017 at 18:25
  • 1
    Fair enough. The faulty conditional is the main problem. And my dupe targets don't apply because he's popping from the end of the list, which is safe to do. Sorry about that. Commented Dec 6, 2017 at 18:31

2 Answers 2

2

The problem here is in your conditional

while len(lists) is True:

is checks for identity, not equality.

[1, 2, 3] == [1, 2, 3]  # True
[1, 2, 3] is [1, 2, 3]  # False, they are two distinct (but equivalent) lists.

However even equality would be incorrect here, since

42 == True           # False
2 == True            # False
any_nonzero == True  # False
# notably 1 == True
# and     0 == False
# but still (1 is True) == False!

You can coerce an integer into a boolean

bool(42) == True           # True
bool(2) == True            # True
bool(any_nonzero) == True  # True

But it's usually better to just leave the coercion to Python

while lists:
    lists.pop()
# or more simply:
# lists = []
Sign up to request clarification or add additional context in comments.

4 Comments

yes you are right i forgot . i should put it in bool() .thank you
Because 0 means False in python, and anything else is true. This means that the code will keep deleting the values until the statement is false (when there are no values in the list).
@StefanPochmann either will work, but you're right that while lists is better. I'll edit
@AJ123 not anything else. The empty string ("") and relevantly empty collections ([], {}, set(), etc) are also Falsey. while lists is definitely the idiomatic approach.
-1

If by "delete" you mean removing the element and reducing the list, you can iterate through a copy of lists with a for loop:

for n in lists[:]:
    lists.remove(n)

If, instead, you want to have a list of None (or 0) values as long as lists, you can do it like this:

newlists = [0] * len(lists)

As was suggested in the previous comment.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.