2013-11-03 53 views
0

我有以下的數組,(我認爲)的子列表中的那樣:蟒蛇3讀陣列(名單?)到新值

items = [('this', 5, 'cm'), ('that', 3, 'mm'), ('other', 15, 'mm')] 

我需要把它讀成將來的計算新值。 例如:

item1 = this 
size1 = 5 
unit1 = cm 

item2 = that 
size2 = 3 
unit2 = mm 
... 

有可能在未來的陣列超過3項,因此理想地需要某種形式的循環?

+0

請檢查更新後的答案 - http://stackoverflow.com/a/19755361/2689986 –

回答

1

Python中的數組可以是2種類型 - Lists & Tuples
list是可變的(即,可以改變元件&如果希望)
tuple是不可變的(只讀陣列)

list[1, 2, 3, 4]
tuple表示由(1, 2, 3, 4)

因此表示,給定的數組是tupleslist
您可以在元組中嵌套元組,但不能在元組中列表。

這是更Python -

items = [('this', 5, 'cm'), ('that', 3, 'mm'), ('other', 15, 'mm')] 

found_items = [list(item) for item in items] 

for i in range(len(found_items)): 
    print (found_items[i]) 

new_value = int(input ("Enter new value: ")) 

for i in range(len(found_items)): 
    recalculated_item = new_value * found_items[i][1] 
    print (recalculated_item) 

從上面的代碼輸出(以輸入爲3)

['this', 5, 'cm'] 
['that', 3, 'mm'] 
['other', 15, 'mm'] 
15 
9 
45 

更新:跟進this comment & this answer我已經更新了以上代碼。

+0

也許我需要一種以不同方式編寫原始數據的方法?我可以理解你如何印刷東西,但最終我需要將大小分配給新的整數值並對它們進行計算。 因此,稍後我可以獲得大小x 2並獲得10(例如,其他值爲6和30) –

+0

您可以隨意使用'item,size,unit'變量。我使用'print'來展示如何在循環中使用它們。 –

0

繼阿希什·帕蒂爾尼丁的答案...

如果有打算在未來三年多的項目,你可以使用星號來解壓的元組的項目。

items = [('this', 5, 'cm'), ('that', 3, 'mm'), ('other', 15, 'mm')] 
for x in items: 
    print(*x) 

#this 5 cm 
#that 3 mm 
#other 15 mm 

注意:Python 2.7似乎不喜歡print方法中的星號。

更新: 看起來你需要使用定義每個值的元組的屬性名稱元組的第二個列表:

props = [('item1', 'size2', 'unit1'), ('item2', 'size2', 'unit2'), ('item3', 'size3', 'unit3')] 
values = [('this', 5, 'cm'), ('that', 3, 'mm'), ('other', 15, 'mm')] 

for i in range(len(values)): 
    value = values[i] 
    prop = props[i] 
    for j in range(len(item)): 
     print(prop[j], '=', value[j]) 

# output 
item1 = this 
size2 = 5 
unit1 = cm 
item2 = that 
size2 = 3 
unit2 = mm 
item3 = other 
size3 = 15 
unit3 = mm 

這裏需要說明的是,你需要確保的是,道具列表中的元素與值列表中的元素按順序匹配。

+0

預期的輸出是: 1.程序從文本文件中讀取項目數組。 2.提示用戶輸入新值 3.重新計算陣列項目的大小 我想我需要對數組項目進行索引,然後分配給新值以執行計算? –

+0

我現在最後需要這樣的東西: newvalue = int(input(「Enter new value:」)) newsize2 = size2 * newvalue print(newsize2) –

+0

我已經相應地更新了我的答案。請檢查。 –