Python:将双项附加到新数组

时间:2013-11-28 13:27:21

标签: python arrays

假设我有一个包含这些项目的数组“array_1”:

A b A c

我希望得到一个 new 数组“array_2”,如下所示:

b A c A

我试过了:

  

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

有谁知道如何解决这个问题?这真的很棒!

谢谢,Nico。

4 个答案:

答案 0 :(得分: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”的情况下添加if语句,例如=> array_1 [i + 1]将不存在。

答案 1 :(得分: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)]

答案 2 :(得分: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']

答案 3 :(得分: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']