3 ms·
Tangential (but topical in that "The threat is comfortable drift toward not understanding what you're doing" is also on the front page): Is the generated pytho
by wwfn 6mo ago
Tangential (but topical in that "The threat is comfortable drift toward not understanding what you're doing" is also on the front page):
Is the generated python code in the example wrong?
The prompt
> Develop a Python function that removes any falsey values from a list. Return the modified list without creating a new one.
Is answered with list comprehension, which makes a new list and leaves the original unmodified (never mind that the *args input necessarily can't be a modifiable list?)
def remove_falsey_values(*args): return [val for val in args if val]
Whereas I'd expect something like
def remove_falsey_values(l):
for i in reversed(range(len(l))):
if not l[i]: l.pop(i)
# returned list is linked to input l
return l
a = [1, 0, False, 'foo']
x = remove_falsey_values(a)
x[0] = 2
print(a) # [2,'foo']
- hecanjog 6mo agoIt doesn't fit the requirement to modify the list in place, but the prompt itself contradicts the requirements by asking explicitly for the implementation to use *args and a list comprehension.
- wwfn 6mo agoAhh I didn't see the full original prompt -- it's overflowing into a horz scroll for me. I thought it was the "critique loop" that injected the *args requirement. I guess garbage in, garbage out. Still unfortunate example to use.
- __s 6mo agodef remove_falsey_values(l): l[:] = (x for x in l if x)
- desideratum 6mo agoOh I wouldn't be surprised. This is a sample from one of the OSS code datasets I'd used, which are all generated synthetically using LLMs. Data is indeed the moat.
- semiinfinitely 6mo agoyour second function is the type of bad code you get from people trying to program python like its c
- wwfn 6mo agoAbsolutely! And the list.pop version is multiple orders of magnitude slower. But I took the prompt to be asking for in-place modification of the existing list. Comprehension does not do that.
- ktm5j 6mo agoIs there a pythonic way to satisfy the prompt? IE without making a new list?
- nomel 6mo agohttps://news.ycombinator.com/item?id=47652757 https://news.ycombinator.com/item?id=47652757
- nusl 6mo agoWhy would you modify the original list and return it with the second example? Honestly the first is better
- highphive 6mo agoThe question isn't really what's better practice, the question is whether the code follows the prompt. The first example does not.
- huflungdung 6mo ago[dead]