2013-11-28 54 views
0

可以說我有一個數組「array_1」這些項目:的Python:追加雙項新的陣列

A B A C

我希望得到一個陣列「array_2」這看起來像這樣:

b A C甲

我嘗試這樣做:

array_ 1 = [ 'A', 'B', 'A', 'C']

array_2 = []

用於項array_1:

if array_1[array_1.index(item)] == array_1[array_1.index(item)].upper(): 
    array_2.append(array_1[array_1.index(item)+1]+array_1[array_1.index(item)]) 

問題:結果看起來是這樣的:

b A b A

有誰知道如何解決這一問題?這將非常棒!

謝謝,尼科。

+3

你的問題很難理解。你能解釋一下大寫字母的意義嗎? –

+2

你能詳細說明你需要什麼嗎?看看這兩個例子列表,我可以想到許多問題,其中最簡單的就是「將列表中的第一項移動到最後一個位置」... –

+0

嗨,讓我們說大寫字母是像SMITH和小寫字母是像邁克和朱迪這樣的名字。 –

回答

3

這是因爲你陣列中有2個'A'。在這兩種情況下,對於'A',

array_1[array_1.index(item)+1 

將等於'b',因爲索引方法返回'A'的第一個索引。

糾正此行爲;我建議使用你爲每個項目增加的整數。在那個CAS中,你將檢索數組的第n項,並且你的程序不會返回兩次相同的'A'。

迴應您的意見,讓我們回到你的代碼,並添加整數

array_1 = ['A','b','A','c' ] 

array_2 = [] 
i = 0 
for item in array_1: 

if array_1[i] == array_1[i].upper(): 
    array_2.append(array_1[i+1]+array_1[i]) 
i = i + 1 

在這種情況下,它的工作原理,但要小心,你需要添加一個,如果在案件中的最後一項聲明你的數組是'A'例如=> array_1 [i + 1]將不存在。

+0

感謝您的幫助!是的,'A'真的是問題所在。你能展示這個整數是怎麼樣的嗎? Sry,我是初學者。 –

+1

'爲我在範圍內(len(array_1)):...' –

+1

另一個建議:'如果數組[i] .isupper()'比數組[i] ==數組[i] .upper ()'。 –

0

如果我理解正確的問題,那麼你可以這樣做:

它將爲陣列的任何長度工作。

array_1 = ['A','b','A','c' ] 
array_2 = [] 
for index,itm in enumerate(array_1): 
    if index % 2 == 0: 
     array_2.append(array_1[index+1]) 
     array_2.append(array_1[index]) 

print array_2 

輸出:

['b', 'A', 'c', 'A'] 
+0

感謝您的幫助!問題是,我的陣列有不同的長度,有時候兩個大寫字母之間的小寫字母不止一個字母 –

2

我認爲,簡單的平面列表是錯誤的工作數據結構如果每個小寫字母與連續的大寫字母配對。如果將它變成一個兩元組列表即:

['A', 'b', 'A', 'c'] becomes [('A', 'b'), ('A', 'c')] 

然後,如果你是通過在列表中的項目循環:

for item in list: 
    print(item[0]) # prints 'A' 
    print(item[1]) # prints 'b' (for first item) 

要做到這一點:

input_list = ['A', 'b', 'A', 'c'] 
output_list = [] 
i = 0; 
while i < len(input_list): 
    output_list.append((input_list[i], input_list[i+1])) 
    i = i + 2; 

然後你就可以交換大寫字母的順序和小寫字母很容易使用列表理解:

swapped = [(item[1], item[0]) for item in list)] 

編輯:

正如你可能已經爲每個大寫字母,你可以用一個列表中爲每個組,然後讓這些團體的名單不止一個小寫字母。

def group_items(input_list): 
    output_list = [] 
    current_group = [] 
    while not empty(input_list): 
     current_item = input_list.pop(0) 
     if current_item == current_item.upper(): 
      # Upper case letter, so start a new group 
      output_list.append(current_group) 
      current_group = [] 
     current_group.append(current_item) 

然後你就可以扭轉的每個內部列表真的很容易:

[reversed(group) for group in group_items(input_list)] 
+0

感謝您的幫助!問題是,在兩個大寫字母之間有時不止一個小寫字母 –

+0

噢好吧,也許列表的清單如下:'[['A','b','d'],[' A','c']]'。你將不得不構建這些有點不同。我可以在我的答案中包含一些代碼,如果它會有幫助的話? –

+0

哦,是的,我希望這會有所幫助。謝謝。 –

1

根據你過去的評論,你可以得到你想要使用這是什麼

array_1 = "SMITH Mike SMITH Judy".split() 

surnames = array_1[1::2] 
names = array_1[0::2] 

print array_1 

array_1[0::2] = surnames 
array_1[1::2] = names 

print array_1 

你得到:

['SMITH', 'Mike', 'SMITH', 'Judy'] 
['Mike', 'SMITH', 'Judy', 'SMITH'] 
+0

感謝您的幫助!問題是在某些情況下,有多個姓(但總是隻有一個姓) –