仅使用循环将列表插入另一个列表:

时间:2015-05-30 23:05:55

标签: python-3.x

我正在使用当前版本的python。我需要返回list1的副本,其中list2插入索引所指示的位置,即如果索引值为2,则list2插入位置2的列表1.我只能使用for / while循环,范围函数& list_name.append(value)方法和列表无法切片。因此,如果list1 list1 = boom list2 = red且索引值= 2,我该如何返回一个新list = boredom?到目前为止我有这个:

#include <Windows.h>
#include <stdlib.h>
#include <string.h>
#include <tchar.h> // Or: remove this

static TCHAR WindowClass[] = TEXT("Window");
// or: static WCHAR WindowClass[] = L"Window";

LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch (uMsg)
    {
        case WM_PAINT:
        {
            static const TCHAR* HelloWorld = TEXT("Hello, World!");
            // or: const WCHAR* HelloWorld = L"Hello, World!";

            PAINTSTRUCT pntStruct = {0};
            HDC hdc = BeginPaint(hWnd, &pntStruct);

            TextOut(hdc, 5, 5, HelloWorld, _tcslen(HelloWorld));
            // or: TextOutW(hdc, 5, 5, HelloWorld, lstrlenW(HelloWorld));

            EndPaint(hWnd, &pntStruct);
            break;
        }

        case WM_SIZE:
        {
            //...
            break;
        }

        case WM_MOVE:
        {
            //...
            break;
        }

        case WM_DESTROY:
        {
            PostQuitMessage(0);
            break;
        }

        case WM_CLOSE:
        {
            //...
            break;
        }

        case WM_ACTIVATEAPP:
        {
            if (WM_ACTIVATEAPP)
            {
                OutputDebugString(TEXT("WM_ACTIVEAPP->TRUE"));
                // or: OutputDebugStringW(L"WM_ACTIVEAPP->TRUE");
            }
            else
            {
                OutputDebugString(TEXT("WM_ACTIVEAPP->FALSE"));
                // or: OutputDebugStringW(L"WM_ACTIVEAPP->FALSE");
            }

            break;
        }
    }

    return DefWindowProc(hWnd, uMsg, wParam, lParam);
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    WNDCLASSEX wclass = {0}; // Or: WNDCLASSEXW
    wclass.cbSize = sizeof(wclass);
    wclass.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
    wclass.lpfnWndProc = &WindowProc;
    wclass.cbClsExtra = 0;
    wclass.cbWndExtra = 0;
    wclass.hInstance = hInstance;
    wclass.hIcon = NULL; // TODO: CREATE ICON
    wclass.hCursor = NULL;
    wclass.hbrBackground = NULL;//(HBRUSH)(COLOR_WINDOW+1);
    wclass.lpszMenuName = NULL;
    wclass.lpszClassName = WindowClass;
    wclass.hIconSm = NULL;

    if (!RegisterClassEx(&wclass)) // Or: RegisterClassExW()
    {
        // error! Use GetLastError() to find out why...
        return 0;
    }

    HWND hCreateWin = CreateWindow( // Or: CreateWindowW()
        WindowClass,
        TEXT("NAME OF WINDOW"), // Or: L"NAME OF WINDOW"
        WS_VISIBLE | WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        CW_USEDEFAULT,//WIDTH:[TODO]->Make custom width to fit window
        CW_USEDEFAULT,//HEIGHT:[TODO]->Make custom width to fit window
        0,
        0,
        hInstance,
        0
    );

    if (!hCreateWin)    
    {
        // error! Use GetLastError() to find out why...
        return 0;
    }

    ShowWindow(hCreateWin, nCmdShow);
    UpdateWindow(hCreateWin);

    MSG message;
    while (GetMessage(&message, NULL, 0, 0) > 0)
    {
        TranslateMessage(&message);
        DispatchMessage(&message);
    };

    return 0;
};

4 个答案:

答案 0 :(得分:2)

Padriac的另一种方法 - 使用三个for循环:

list1 = ['b','o','o','m']
list2 = ['r','e','d']

n = 2
new_list = []
for i in range(n): # append list1 until insert point
    new_list.append(list1[i])
for i in list2: # append all of list2
    new_list.append(i)
for i in range(n, len(list1)): # append the remainder of list1
    new_list.append(list1[i])

答案 1 :(得分:1)

点击索引后,使用内部循环追加list2中的每个元素:

for ind, ele in enumerate(list1):
    # we are at the index'th element in list1 so start adding all
    # elements from list2
    if ind == index:
        for ele2 in list2:
            new_list.append(ele2)
    # make sure to always append list1 elements too      
    new_list.append(ele)
print(new_list)
['b', 'o', 'r', 'e', 'd', 'o', 'm']

如果必须使用范围,只需用范围替换枚举:

new_list = []

for ind in range(len(list1)):
    if ind == index:
        for ele2 in list2:
            new_list.append(ele2)
    new_list.append(list1[ind])
print(new_list)
['b', 'o', 'r', 'e', 'd', 'o', 'm']

或者如果没有ifs使用extend并在允许的情况下删除:

new_list = []
for i in range(index):
    new_list.append(list1[i])
    list1.remove(list1[i])
new_list.extend(list2)
new_list.extend(list1)

一旦我们点击索引即附加意味着将从正确的索引插入元素,必须始终在if检查后追加list1中的元素。

答案 2 :(得分:0)

查看我写过的这小段代码。 检查使用的while条件。我希望它能回答你的问题。

email = ("rishavmani.bhurtel@gmail.com")
email_split = list(email)

email_len = len(email)
email_uname_len = email_len - 10

email_uname = []
a = 0
while (a < email_uname_len):
    email_uname[a:email_uname_len] = email_split[a:email_uname_len]
    a = a + 1

uname = ''.join(email_uname)
uname = uname.replace(".", " ")
print("Possible User's Name can be = %s " %(uname))

答案 3 :(得分:-1)

列表索引的实现:

list1 = ['b','o','o','m']
list2 = ['r','e','d']


print list1[:2] + list2 + list1[2:]