簡體   English   中英

確定可迭代對象是python中的字符串還是列表

[英]Determining whether an iterable is a string or list in python

我制作了一個具有多個復選框的html頁面。 復選框的每個值都是兩個數字,中間用問號隔開,即“ 1?16”。

<input class="checkbox1" type="checkbox"  name ="nr_ids" id="checkbox_id" value ="1?16">Name1,16</label> <br>
<input class="checkbox1" type="checkbox"  name ="nr_ids" id="checkbox_id" value ="11?4">Name11,4</label> <br>

然后,我使用python cgi讀取了此信息:

NRs = form.getvalue("nr_ids")
NRids = []
for l in NRs:
    ls = l.split("?")
    NRids.append(ls)

如果同時選擇兩個,則它們將為['1?16','11?4']。 如果您只選擇一個,則為“ 2?14”

我想要的是一個列表列表,其中每對數字都是子行:[['1','16'],['11','4']]。 如果我選擇兩個或多個復選框,則效果很好。 但是,我只選擇1,程序崩潰。 NRids變為[['1'],[','],['1'],['6']]。 當我嘗試采用NR的類型時,沒有任何顯示。 我不知道當他們鍵入函數似乎沒有打印任何內容時,如何自動檢查是否傳遞了字符串或列表。

我如何檢查是否僅選中了一個復選框,所以如果沒有選中,則不將NR視為列表? 還是有人對我如何解決此問題有其他建議?

if isinstance(a_variable,basestring):
   #its a string of sorts
elif isinstance(a_variable,(list,tuple)):
   #its a list or table

我猜?

如果處理代碼不是完全無關緊要的,那么一個不錯的習慣用法就是盡早檢查類型並將較簡單的情況轉換為更一般的情況; 在這種情況下,如果該值不是列表,則將其轉換為一個元素列表。 然后,其余代碼可以依賴於獲取列表,從而使您無需重復自己:

if not isinstance(NRs, list):
    NRs = [ NRs ]

# Now it's a list for sure...
for l in NRs:
    ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM