Don't append the filenames to a string. Use an array instead:
i=1
list=( "science.pdf" )
outputfile="file.pdf"
while [ $i -le 3 ]; do
file="science (${i}).pdf"
list+=( "$file" )
let i=i+1
done
pdftk "${list[@]}" cat output $outputfile
You can also simplify your script further by using a for-loop as shown below:
list=( "science.pdf" )
for (( i=1; i<=3; i++ )); do
file="science (${i}).pdf"
list+=( "$file" )
done
pdftk "${list[@]}" cat output $outputfile