Python排序,不对数据排序

时间:2018-07-31 16:45:35

标签: python list sorting input

我有一个非常简单的程序来对数据进行排序并将其写入文本文件,但是排序后的方法并没有实现应有的功能。取而代之的是,值按我输入它们的顺序输入数组和文本文件。谁能迅速解释原因?

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/colorPrimary"
    tools:context=".EnterPipeIEActivity">

    <LinearLayout
        android:id="@+id/linear_layout_root"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="130dp"
            android:orientation="horizontal">

            <TextView
                android:id="@+id/textView3"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:gravity="center"
                android:text="@string/add_pipe_ie_title"
                android:textSize="35sp" />

        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="80dp"
            android:layout_weight="1"
            android:orientation="horizontal">

            <TextView
                android:id="@+id/textView11"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:gravity="center"
                android:text="@string/channelized_pipes"
                android:textSize="24sp" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="80dp"
            android:layout_marginLeft="40dp"
            android:layout_marginRight="40dp"
            android:orientation="horizontal">

            <CheckBox
                android:id="@+id/checkBox"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:gravity="center"
                android:text="CheckBox" />

        </LinearLayout>

    </LinearLayout>
</ScrollView>

2 个答案:

答案 0 :(得分:0)

我无法重新创建您的问题。下面的代码可以正常工作,正确地对给定的数字进行排序,然后写入文件。

您还要对数组进行两次排序,我已对其进行了纠正。

values = []
sorted_values = []
data = 1

while data:
    data = input('Enter the values. Press enter to confirm values:')

    if data:
        values.append(data)
    else:
        data = data
        # here you are sorted it first and second outside of while loop
        sorted_values = sorted(values)
        print(sorted_values)

print(sorted_values)

with open("sortedvalues.txt", "a+") as name:
    name.write('\n' + str(sorted_values))

with open("sortedvalues.txt", "r") as open1:
    print('reading')
    print (open1.read())

输入:

5
3
4
2
1
0

内部文件:

[1, 2, 3, 4, 5]

答案 1 :(得分:0)

@JohnGordon在下面的评论中回答了这个问题。问题不在于代码的工作方式,这可能是不正确的。问题在于整数值实际上被当作字符串进行排序,就好像它们是字符串一样。输入值首先需要进行转换,然后再进行排序。

编辑我应该补充一点,将输入指定为整数会导致回溯,因为null(当用户按Enter确认输入的值时)不能解析为整数。要解决此问题,我只需添加

while data:

data = input('Enter the values. Press enter to confirm values:')

if data:
        values.append(int(data))
else:
    data = data
    print(sorted(values))

具体来说,在if data:部分中,指定将数据作为int追加到列表中可以解决此问题,并且sorted.sort()方法可以正常工作。