gpt4 book ai didi

python - 如何在 Python 中制作一个以逗号结尾的列表?

转载 作者:行者123 更新时间:2023-12-04 16:19:40 28 4
gpt4 key购买 nike

当使用 Mechanize 更改表单中项目的状态时,我需要在 Python 中创建一个列表,如下所示:

['2009', '2008', '2007', '2006', '2005', '2004',]

该列表必须以逗号结尾,否则将不起作用。例如,以下代码有效:
br = mechanize.Browser()
br.select_form(nr=0)
br['ctl03'] = ['2009', '2008', '2007',]

但是,以下代码不起作用:
br = mechanize.Browser()
br.select_form(nr=0)
br['ctl03'] = ['2009', '2008', '2007']

这是我不使用尾随逗号时收到的错误消息:
Traceback (most recent call last):
File "C:/Users/Renato/PycharmProjects/Agrolink/faostat.py", line 43, in <module>
br['ctl03$DesktopThreePanes1$ThreePanes$ctl01$TMyears'] = ['2009', '2008', '2007']
File "C:\Python26\lib\site-packages\mechanize\_form.py", line 2782, in __setitem__
control.value = value
File "C:\Python26\lib\site-packages\mechanize\_form.py", line 1977, in __setattr__
self._set_value(value)
File "C:\Python26\lib\site-packages\mechanize\_form.py", line 1985, in _set_value
raise TypeError("ListControl, must set a sequence")
TypeError: ListControl, must set a sequence
Process finished with exit code 1

好吧,在处理了整个下午的这个问题之后,我了解到这就是我如何让它在没有尾随逗号的情况下做我需要的事情:
 mylist = ['2009', '2008', '2007']
br.set_value(mylist, name="ctl03")

最佳答案

这没有多大意义 - 逗号是将列表表示为字符串时放入的格式化内容,逗号对列表本身没有任何值(value)。

您想将列表的输出更改为字符串,还是在此处执行其他操作?如果你想要一个额外的“空”项目,那么你可以附加 None到列表,例如,模仿。

要使用这样的额外逗号格式化字符串,您需要执行以下操作:

"["+", ".join(mylist)+",]"

更新您的编辑:

您列出的两行在 Python 中的含义完全相同 - 不可能有一行行而另一行行不通。尾随逗号是一种语法糖,可让您懒惰地写出列表文字。
>>> ['2009', '2008', '2007',] == ['2009', '2008', '2007']
True

再次编辑:

尾随逗号影响您的代码实际上是不可能的。如果我们反汇编 python 产生的字节码:
import dis

def test1():
['2009', '2008', '2007',]

def test2():
['2009', '2008', '2007']

dis.dis(test1)
dis.dis(test2)

这给了我们:
  4           0 LOAD_CONST               1 ('2009') 
3 LOAD_CONST 2 ('2008')
6 LOAD_CONST 3 ('2007')
9 BUILD_LIST 3
12 POP_TOP
13 LOAD_CONST 0 (None)
16 RETURN_VALUE
7 0 LOAD_CONST 1 ('2009')
3 LOAD_CONST 2 ('2008')
6 LOAD_CONST 3 ('2007')
9 BUILD_LIST 3
12 POP_TOP
13 LOAD_CONST 0 (None)
16 RETURN_VALUE

我们可以看到字节码是完全一样的。额外的逗号不作为信息与列表一起存储。鉴于此,我们可以说这不是影响您代码的原因,所以您能否将您的示例简化为我们可以测试的内容,通过可重现的错误,我们可以看到问题究竟是什么。

我无法重现这种行为:

测试.html:
<form name="test">
<input type="checkbox" name="vehicle" value="Bike" /> I have a bike<br />
<input type="checkbox" name="vehicle" value="Car" /> I have a car
</form>

进而:
>>> br.open("file:///path/to/test.html")
<response_seek_wrapper at 0x1d74cf8 whose wrapped object = <closeable_response at 0x1f9be60 whose fp = <open file '/path/to/test.html', mode 'rb' at 0x221b9c0>>>
>>> br.select_form(name="test")
>>> br["vehicle"] = ["Bike", "Car",]
>>> br["vehicle"] = ["Bike", "Car"]

两种变体都可以毫无怨言地工作。

关于python - 如何在 Python 中制作一个以逗号结尾的列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10436976/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com